1.(1)List,Set都是继承自Collection接口,Map则不是
(2)List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set的Object必须定义equals()方法,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)
(3)Set和List对比:
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
4.Map适合储存键值对的数据
5.线程安全集合类与非线程安全集合类
LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安全的。
--------------------------------------------------
2.keySet()返回此映射包含键的set集合,values()返回所有值,entrySet()返回所有映射关系 key-value都可以为null
3.判断是都包含某个元素,constains()方法,其实是重写Object的equals方法,一个元素一个元素比较,只要包含一个true,则返回true。
4.给List排序:java.util.Collection;List<Integer> ls = new ArrayList<Integer>(); Collection.sort(ls);进行排序(Integer类型);
5.4的前提是实现Comparable接口,Comparable和Comparator比较:
Comparable接口-可比较,其实现类要实现compareTo()方法,返回正数表示大,0表示相等
Comparator-比较工具接口,用于定义 临时 定义比较规则,其实现类需要实现compare()方法
6.
1).ArrayList维护着一个对象数组。如果调用new ArrayList()后,它会默认初始一个size=10的数组。
每次add操作都要检查数组容量,如果不够,重新设置一个初始容量1.5倍大小的新数组,然后再把每个元素copy过去。
在数组中间插入或删除,都要移动后面的所有元素。(使用System.arraycopy())
2).LindedList
LinkedList的实现是一个双向链表。每个节点除含有元素外,还包含向前,向后的指针。
新建一个LinkedList,生成一个头节点(header,就是一个头指针),它的元素为null。
3).比较ArrayList和LinkedList的结构,就可以得出:
——1.ArrayList的remove和add(index, Object)操作代价高,需要移动后面的每个元素。
——2.LinkedList的get(index)操作代价高,它要先循环遍历list,找到Object
网友评论