java基础知识-集合

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值