集合学习笔记

一、常用集合概览
单例集合:
----| Collection 单列集合根接口
---------| List 实现List接口具备的特点:有序、可重复。
-------------| ArrayList   底层用Object数组实现,特点:查询快、增删慢。
-------------| LinkedList  底层用链表结构实现的,特点:查询慢、增删快。
-------------| Vector    实现与ArrayList是一样,不过是线程安全的,操作效率低。
---------| Set  实现Set接口的特点:无序、不可重复。
-------------| HashSet 底层用哈希表实现,存取顺序不能保证一致。保证元素唯一性需hashCode()与equals()方法。 
-------------| TreeSet 底层用二叉数实现。
-------------| LinkedHashSet  底层结构用哈希表结构 + 链表结构实现,元素唯一不能重复,元素存取顺序一致
双列集合:
----| Map 双列集合根接口  
---------| HashMap   底层使用哈希表实现 
-------------| LinkedHashMap
---------| TreeMap   底层使用二叉数实现,可对集合中的键进行排序
---------| LinkedMap HashMap的子类,保留了元素插入的顺序
---------| HashTable

二、Collection接口
boolean add(Object o) 返回true或false
boolean addAll(Collection c)          把一个集合的元素添加到另外一个集合中
boolean remove(Object o)
void clear()
boolean removeAll(Collection c) 删除交集元素
boolean retainAll(Collection c)          保留交集元素,删除非交集元素
int size() 查看元素个数
boolean isEmpty()
boolean contains(Object o) 比较对象的是它们的地址,要重写equals()
boolean containsAll(Collection c)
Object[] toArray() 把集合转成数组
1.List接口:
在指定位置上添加元素
void add(int index,Object o)
boolean addAll(int index,Collection c)
Object remove(int index)
Object get(int index)
List subList(int fromIdex,int toIndex)
查找元素
int indexOf(Object o)
int lastIndexOf(Object o)
修改位置上的元素
Object set(int index,Object o)
转换成迭代器元素
ListIterator listIterator()
ListIterator listIterator(int index)
ArrayList
ArrayList使用数组方式实现List接口,它的检索效率很高。
ArrayList可以按照List使用
boolean add(int index,  Object obj)          在集合中指定index位置,添加新元素ob
Object set(int index, Object obj)          用指定元素obj替代集合中指定index位置的元素
Object remve(int index) 从集合中删除指定index处的元素,返回该元素
void clear() 清空集合中所有元素
LinkedList
特有的方法:
addFirst(E e)
addLast(E e)
getFirst(E e)
getLast(E e)
removeFirst(E e)
removeLast(E e)
数据结构
堆栈                  先进后出,后进先出
push() 将该元素插入集合的开头处
pop() 移除并返回集合中的首元素
队列                  先进先出,后进先出
offer() 将元素添加到列表的末尾
poll() 获取并移除集合中的首元素
返回逆序迭代器
descendingIterator()
③ArrayList和LinkedList的比较:
ArrayList
使用数组方式实现List接口
检索效率很高
删除效率很低。
LinkedList
使用双向链表方式实现List接口
删除效率很高
检索效率很低。
Vector (向量):一种动态数组,元素只能是对象,对象类型可以不同。
创建向量:
Vector  v = new Vector();
添加元素:
v.addElement(anObject);
获取元素:
Object anObject = v.elementAt(0);
获取向量中元素个数:
int num = v.size();
插入一个元素:
v.insertElement(anObject , 4);
替换指定下标的元素:
v.setElement(anObject,4);
删除指定下标的元素:
v.removeElement(4);
2.Set接口
HashSet
一个实现Set接口的具体类
集合中元素无序
元素不重复
元素值可以为空(null)
Hashtable
实现了Map接口的具体类,用于存储映射(Map)关系。
与ArrayList使用下标数字来确定对象不同,它使用一个对象(键)来确定另一个对象(值)。
键不能重复,也不能为空(null)
三、Map根接口(键key不能重复,值value可以重复)
添加元素方法
Object put(Object key,Object value)
void   putAll(Map m)
获取元素方法
Object get(Object key)
       size()
删除元素方法
Object remove(Object key) 根据指定的键(key)删除元素,返回被删除元素的值(value)。
   clear()
判断方法
boolean containsValue(Object value)
boolean containsKey(Object key)
isEmpty()
转换成其他集合的方法
Set entrySet()
Collection values()
Set keySet()
遍历方式
[java]  view plain  copy
  1. 第一种:  
  2. Set<String> keys = map.keySet();  
  3.         for (String key : keys) {  
  4.     Student s = map.get(key);  
  5.     System.out.println( key + "..." + s.getName() + "..." + s.getAge() );  
  6. }  
  7. 第二种:  
  8. Set< Map.Entry<String, Student>> entrySet = map.entrySet();  
  9.     for (Map.Entry<String, Student> entry : entrySet) {  
  10.     String key = entry.getKey();  
  11.     Student s = entry.getValue();  
  12.     System.out.println( key+"..."+s.getName()+"..."+s.getAge() );  
  13. }  
1. HashMap
存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
2. LinkedHashMap
HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
3.其他接口:
SortedSet接口
一种按升序排列的Set
其实现类 TreeSet
SortedMap
与SortedMap类似
实现类 TreeMap
四、Iterator(迭代器)
提供了一种对各种对象集合统一遍历的方式。
主要方法:
boolean hasNext()
Object next()
void remove()
五、Collections集合工具类和Arrays数组工具类
Collections类常见方法:
sort(list);  //排序
sort(list,comaprator); //排序,比较器
reverse(list); //反转
int binarySearch(list,key); //对list进行二分查找
int binarySearch(list,key,Comparator);
max(Collection)
max(Collection,comparator)
Set synchronizedSet(Set<T> s) //将不同步的集合变成同步的集合,变安全
Map synchronizedMap(Map<K,V> m)
List synchronizedList(List<T> list)
Arrays类常见方法:
toString(int[]) //将数组变成字符串
sort(int[])
sort(char[])
copyOf();
copyOfRange(); //复制部分数组
equals(int[],int[]);          //比较两个数组是否相同
List asList(T[]);          //将数组变成集合
binarySearch(int[]) //二分查找,数组需要有序
六、总结
①数组保存类型明确的对象,可以是多维的,也可以保存基本数据类型数据,但是数组一旦生成,其容量不能改变。
②Collection保存单一元素,而Map保存相关联的键值对。
③与数组类似,List也建立数字索引与对象的关联,可以认为数组和List都是排好顺序的集合。List是可以自动扩充容量。但是,List不能保存基本数据类型的数据,只能保存Object引用,因此,取元素后需要作类型转换。
④如果需要作大量的随机访问(检索),就使用数组或ArrayList,如果要经常从集合中插入或删除元素,应该使用LinkedList。
⑤队列、双向队列以及栈的行为,可以由LinkedList来实现。
⑥Map是一种将对象与对象相关联的设计。常见HashMap、TreeMap和Hashtable,其中HashMap与Hashtable相似,TreeMap侧重于排序。 
⑦Set不接受重复元素。HashSet提供最快的查询速度,而TreeSet保持元素处于排序状态。

猜你喜欢

转载自blog.csdn.net/qq_27607965/article/details/79941149