基础笔记8(二)(容器-引用类型的排序)
1.类库中比较对象的大小实现了comparable接口的compateTo().
已经实现了的如:integer,date,String(比较是每个字符的unicode编码大小,字符一样比较长度)
2.比较对象的两种方法:collections类提供的
1.public static <T extends Comparable<? super T>> void sort(List<T> list) {}
比较的对象实现Comparable接口的comrateTo()比较方法,
2.public static <T> void sort(List<T> list, Comparator<? super T> c) {}
另外编写两个对象的比较方法实现comparator接口的compate(),独立于比较的对象。
Collections提供排序算法。
3.hashSet,treeSet对于集合自定义元素需要重写hashcode和equals方法以区别对象相等去重复。
4.有序的集合和map:TreeSet TreeMap
4.1对于Tree容器是在添加元素时进行了排序,元素内容修改时候不会进行排序,并且可以修改产生相同数据。
构建TreeSet的集合的元素需要实现comparable接口,或者构建时候提供实现comparator接口的比较器。
构建TreeMap容器key也要已经实现接口,或者提供比较器(TreeSet其实也一种填充了value的TreeMap)
5.Collections的常用方法:
shuffle(List<?> list) 洗牌:随机打乱顺序
addAll(Collection<? super T> c, T... elements)
swap(List<?> list, int i, int j) 交换数据
6.队列:Queue Deque
单向队列接口(queue):只能一端操作,一般是前进先出,优先级队列,堆栈队列(后进先出)
(前者方法出错抛出异常;后者返回布尔值)
添加元素:add(E e) ;offer(E e) ;
获取元素:element() ;peek();
删除元素:remove(); poll();
双向队列接口(Deque):可两端操作
添加第一个元素addFirst(E e) push(E e); offerFirst(E e);
获取第一个元素getFirst() element() ; peek() peekFirst();
删除第一个元素remove() removeFirst(); poll() pollFirest();
addLast(E e) add(E e); offer(E e) offerLast(E e)
getLast() ; peekLast()
removeLast() ; pollLast()
7。Enumeration接口类似迭代器(1.5之前的)。
8.vector 线程安全的数组,貌似没用过。
9。hashtable 线程安全,父类是dictionary,键值不能为null(应该做同步的需要把 )
hashMpa非线程安全,父类是abstractMap,键可以为一个是null,值无所谓。
10.property 属于Map的实现类用于读写配置,键值都是value
常用方法
getProperty(String key)
getProperty(String key,String default):读取不到值,用默认值代替。
.property .xml 存放格式
10.1加载配置的几种方式和路径(相对和绝对路径(略))
11引用的的几种类型 :(简单纪录一下)
强引用(StrongReference):gc不会回收的
软引用(softReference):gc可能会被回收
弱引用(weakReference):gc时会被回收
虚引用(phantomReference):类似无引用,用于跟踪对象的回收状态和referenceQueue联合使用
(对象加入弱引用中运行gc()对象被回收(如new String("会回收");常量池中的却不会回收(String s="不会回收");
12,扩展的容器工具包有google的guava 和apache的commons_Collections
git:代码管理软件获取guava的源码
hugechm工具软件(将html文档转换为chm格式,适合转换api文档)
总结:
13.容器的三个重点:
迭代器:高效的遍历,增强for (实现iterator接口)
比较器:比较方法实现comparator 或者 对象实现comparable接口
有序的集合和键值treeSet和treeMap
泛型:类 接口 方法 通配符 ? super extends
14.hashSet需要重写hashcode 和equals来区分重复对象