java集合知识归纳1
一:遍历
遍历map集合
第一种:通过提取map中的key,用map中 set keyset方法.
HashMap<Integer,String> stringHashMap=new HashMap<Integer,String>();
stringHashMap.put(1,"wu");
for(Integer a:stringHashMap.keySet())
{
System.out.println(stringHashMap.get(a));
}
第二种:运用entryset方法.
Map<Integer,String> map=new HashMap<Integer,String>();
map.put(1,"wu");
map.put(2,"hai");
map.put(3,"hong");
Iterator<Map.Entry<Integer,String>> iterator=map.entrySet().iterator();
while(iterator.hasNext())
{
Map.Entry<Integer,String> a=iterator.next();
}
第三种:Map中有 set entryset()方法,返回set集合里面的元素为entry,
所以用Map.Entry来进行遍历即可,此方法作为简单,也适合大容量的Map集合遍历
Map<Integer,String> map=new HashMap<Integer, String>();
for(Map.Entry<Integer,String> c:map.entrySet())
{
};
遍历List
第一种:最为经典的迭代器:iterator;
List<String> list=new ArrayList<String>();
Iterator iterator=list.iterator();
while(iterator.hasNext())
{
String a= (String) iterator.next();
System.out.println(a);
}
//第二种写法
for(Iterator iterator1=list.iterator();iterator1.hasNext();)
{
String a=(String)iterator1.next();
System.out.printlnfor(Object object:list)
{
System.out.println((String)object);
}(a);
}
第二种:因为List有序,直接用Obeject来遍历,结果转换为String.
for(Object object:list)
{
System.out.println((String)object);
}
遍历Set集合
十分的简单,和list相差无几.
二Arraylist,Linkedlist,Vector
Linklist:
1,Linklist中不推荐使用for循环或者下标进行遍历和索引,因为链表的索引每次都要从第一个位置开始。
2.底层是双向链表。因此空间开销更大。
Arraylist:
1,因为是动态的扩容数组。
2.随机访问的时候效率高于Linklist.而进行插入操作的时候,Arraylist的效率没有linkedlist高。
Vector:
1.Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢,vector是线程(Thread)同步(Synchronized)的,所以它也是线程安全的,而Arraylist是线程异步(ASynchronized)的,是不安全的。如果不考虑到线程的安全因素,一般用Arraylist效率比较高。
2.如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度
的50%.如过在集合中使用数据量比较大的数据,用vector有一定的优势
三:HashSet,TreeSet,HashMap,TreeMap,HashTable
散列表(Hash Table):底层用链表数组来实现。每个字符会获得一个hashcode,hashtable运用这个hashcode来进行存储。有时候桶已经被填充了,发生散列冲突,需要新对象和桶中所有对象进行比较,如果桶的数目很大的话,比较的次数就会较少。一般设置散列表的桶数为元素个数的75%-150%期间。有研究人员称将桶数改为素数可以防止键的聚集。填装因子一般为0.75,填装倍数为2倍。
Hashset的构造方法有HashSet(),HashSet(int initialcapacity,float loadFactor)为桶的数量和填充的百分比。
TreeSet,注意,TreeSet是用红黑树,平衡二叉树来进行比较的,所以要使用TreeSet的对象必须实现Comparable接口,或者在构造的时候提供一个Comparator比较器。所以,如果不是要求对象是有序的,就不用进行Treeset,而使用HashSet来使用。
HashMapHashMap底层由链表+数组+红黑树实现可以存储null键和null值,线性不安全.初始容量为16,扩容每次都是2的n次幂,加载因子为0.75,当Map中元素总数超过Entry数组的0.75,触发扩容操作.并发情况下,HashMap进行put操作会引起死循环,导致CPU利用率接近100%.HashMap是对Map接口的实现
HashTable,HashTable的底层也是由链表+数组+红黑树实现。
无论key还是value都不能为null,它是线性安全的,使用了synchronized关键字。HashTable实现了Map接口和Dictionary抽象类.Hashtable初始容量为11