Java之List&Set&Map详解

来源:互联网 发布:2015乘用车销量数据 编辑:程序博客网 时间:2024/05/23 01:15

1.常用的集合:
Colleaction
|---List
|--ArrayList<T>
|--LinkedList<T>
|--Set
|--HashSet<T>
|--LinkedHashSet<T>

Map
|--HashMap<K,V>
|--LinkedHashMap<K,V>


2.ArrayLsit<T>和HashSet<T>,HashMap<K,V>之间的比较:
2.1 ArrayList底层是用数组来实现的,HashSetHashMap底层是hash表实现的
2.2 ArrayList的元素存入和取出时的顺序可以保证一致,而HashSetHashMap不能保证一致,但是LinkedHashSethe LinkedHashMap可以保证一致。
2.3 ArrayListZ中可以存放重复的元素,而HashSetHashMap不能存放重复的元素
 
3.LinkedList和ArrayList的比较:
LinkedList底层采用的是链表:增删快,查找慢
ArrayList底层采用的是数组:查找慢,增删快
4.ArrayList<T>和HashSet<T>,HashMap<K,V>常用的方法总结:
4.1ArrayList:
booleanadd(E e) 将指定的元素添加到此列表的尾部。
 
voidadd(int index, E element) 将指定的元素插入此列表中的指定位置。
 
booleancontains(Object o) 如果此列表中包含指定的元素,则返回 truevoidclear() 移除此列表中的所有元素。booleanremove(Object o)移除此列表中首次出现的指定元素(如果存在)。Eset(int index, E element用指定的元素替代此列表中指定位置上的元素。Object[]toArray() 按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。Eget(int index)返回此列表中指定位置上的元素。
 
 
 
4.2LinkedList:基本的方法和ArrayList相同都是实现Collection中的方法
特有的方法:
Object[]toArray()按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。EgetLast() 返回此列表的最后一个元素
 
intindexOf(Object o) 返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。intlastIndexOf(Object o)返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。booleanofferFirst(E e) 在此列表的开头插入指定的元素。Epop() 从此列表所表示的堆栈处弹出一个元素。voidpush(E e)将元素推入此列表所表示的堆栈
 
4.3 HashSet<T>方法:和Collection相同
4.4HashMap<K,V>方法:实现的Map接口中的方法
Vget(Object key)通过键来找值,没有返回nullbooleanisEmpty()如果map为空则返回 true。Set<K>keySet()返回此映射中所包含的键的 Set 集合,foreach获取每个键,通过Map的get()方法找对应的值Vput(K key, V value)添加键值对,如果已经包含了该键,则就是修改键的内容Vremove(Object key)从此映射中移除指定键的映射关系(如果存在)。并且返回被移除的value值Set<K,V>entrySet()获取map中的键值对
 
5.Collections工具类:
5.1:
staticsort(List<T> list, Comparator<? super T> c)根据指定比较器产生的顺序对指定列表进行排序。
<T> void
Sort()方法只能用于List集合中,一般的包装类型的直接sort(List<T>)将按照自然(字母或者数字)的升序排列,不能比较中文。
当T是自定义类型时,需要该类实现Comparable接口并且实现其中的CompareTo()方法,在方法中添加比较的规则。
5.2
static voidshuffle(List<?> list) 随机打乱集合中元素的顺序
6.三种集合的遍历总结:
ArrayList<T> list = new ArrayList<T>;
第一种方式:增强for循环
for(T t: list){
直接得到t;
}
第二种方式:Iterator 迭代器 和ListIterator迭代器
Iterator 迭代器中不能并发修改集合
ListIterator 迭代器有add方法可以并发修改集合
Iterator<T>  iterator = list.iterator();
While(iterator.hashNext()){
Iterator.next();
}
HashSet<T>
同上
HashMap<K,V>的遍历的两种方式:
1.通过键找值:使用Set<K> keySet<>;方法获取map集合中所有的Key值,再增强for循环遍历得每个key,通过get(key)获得对应的值
Set<String> keySet =map.keySet();
for (Stringkey :keySet) {
System.out.println(key +"=" +map.get(key));
}
2.一次获取key和value:使用entrySet()方法同时获取键值对,遍历获取每个键和值
Set<Entry<String, HashMap<String, String>>> entrySet =map.entrySet();

for (Entry<String, HashMap<String, String>>entry :entrySet) {
System.out.println(entry.getKey()+"="+entry.getValue());
}