JAVA集合

一:Collection

        1- Collection接口,单列数据,定义了存取一组对象的方法的集合。

    //collection 公有方法
		List<Object> list = new ArrayList<Object>();
		List<Integer> list2 = new ArrayList<>();
		Collections.addAll(list, "张三",123,12,123);
		Collections.addAll(list2, 10,20,3,43,34,12,11);
		list.add(211);    //添加一个元素
		list.remove("张三");    //删除指定元素
		list.add(list2);//添加一个集合
		System.out.println(list.isEmpty());    //判断是否为空
		System.out.println(list.size());    //集合长度
		System.out.println(list.contains("张三"));    //判断是否存在指定元素
		System.out.println(list.containsAll(list2));    //是否包含指定集合所有元素
		System.out.println(list2.retainAll(list));    //交集,只保留两个集合中同时存在的
		System.out.println(list.equals(list2));    //判断两个集合是否相同
		System.out.println(list.hashCode());    //返回哈希值
		Object[] a = list2.toArray();    //集合转数组
		System.out.println(Arrays.toString(a));    //字符串形式输出数组
        list.clear();    //清空集合

        2- List:

              有序、可重复的

        ArrayList:

              是数组实现,通过下标查找,遍历速度较快,增加删除速度较慢,线程安全性低。

    //ArrayList  独有方法
		List<Integer> l = new ArrayList<>();
		List<Integer> v = new ArrayList<>();
		Collections.addAll(v, 11,22,33,44,55);
		Collections.addAll(l, 1,2,3,4,5,6,7,8,9);
		l.add(3, 666);    //将指定元素添加到指定位置
		System.out.println(l);
		l.addAll(5, v);    //将指定集合添加到指定位置
		System.out.println(l.get(5));    //获取指定下标位置的元素 
		System.out.println(l.indexOf(5));    //查看元素在集合中第一次出现的位置
		System.out.println(l.lastIndexOf(3));    //查看元素在集合中最后一次出现的位置
		l.remove(3);     //根据索引删除集合中元素
		l.set(1, 777);    //将指定位置的元素设置为指定元素
		System.out.println(l.subList(2, l.size()));    //指定位置到指定位置的子集合

        LinkedList:

               是双向链表,增删速度较快,遍历较慢。

    //LinkedList    独有方法
        LinkedList<Integer> ls = new LinkedList<Integer>();
   		Collections.addAll(ls, 1,2,3,4,5,6,7,8,9);
		ls.addFirst(0);//向集合前面添加一个元素
		ls.addLast(0);//向集合的后面添加一个元素
		System.out.println(ls);
		ls.removeFirst();//删除集合第一个元素
		ls.removeLast();//删除集合最后一个元素
		System.out.println(ls);
		System.out.println(ls.getFirst());//查看第一个元素
		System.out.println(ls.getLast());//查看最后一个元素

        Vector:

                是数组实现,与ArrayList几乎相同,区别为安全性高,效率低

        3- Set:

        无序、不可重复的

               HashSet: ⬇子类 

               LinkeHashSet:

                     可以解决无序问题,使其打印顺序与插入顺序相同.

        4- 遍历方法:        

                普通for循环~~~

                加强for循环:

                        要遍历的元素类型 自定义变量名 :要遍历的集合

        3.迭代器:

     

二:Map     

     1.是双列数据,存储key   value对的数据,key不能重复,值可以覆盖.

     2.HashMap:

              Map主要实现类效率高、线程不安全,可以存储null的key和value

              方法:

                     Map 集合名 = new HashMap( );      创建HashMap

                     集合名.put(key , value);             通过put注入key值与value值

                     集合名.putAll(Map n);                将n中的所有Key与value值赋予该HashMap

                     集合名.get(key);                         通过get来获取这个 HashMap 中key对应的value值

                     集合名.size( );                          size 获取 HashMap 长度

                     集合名.containsKey(key);         判断 HashMap 中是否存在此key

                     集合名.remove(key);                  删除指定key

                     集合名.KeySet/values( );           获取 HashMap 中所有key/value

                     集合名.clear( );                           清空该  HashMap

      3.子类:

                       LinkedHashMap

                     1.底层与HashMap相同

                     2.可以解决无序问题,使其打印顺序与插入顺序相同

                     3.遍厉效率高,添加效率低

      4.TreeMap与HashTable:

                       ①. 相对来说不常用

                        ②.TreeMap:底层使用的是红黑树,key不能为空。

                        ③.HashTable:与HashMap基本相同,线程更安全,效率较慢,不可以存储null的key和value。

       5:底层原理:

                HashMap:

                        ①.JDK7:数组+链表的形式:

                               底层创建了一个长度为16的数组,当存入超过75%时就会扩容为原来的两倍, 元素存储的位置由key的哈希值决定,存入这个长度为16的数组,如果多个元素存到一起则会以链式的形式存储。

                        ②.JDK8:数组+链式+红黑树的形式:

                               当向HashMap中添加第一个元素时,才会创建一个长度为16的数组,元素存储的位置由key的哈希值决定,存储超过临界值时就会进行扩容 (存放的位置不能为空,就会扩容为原来数组长度的两倍,并将原数组中的数组拷贝到新数组中),当存储位置已经已经存在数据时就会发生哈希冲撞 (先比较几个数据的key的哈希值是否相等,如果不同则直接添加成功,如果相同就要调用equals进行比较,相同则覆盖,不同则添加成功),形成链表,存储长度大于等于8个时(数组长度要大于等于64)就会形成红黑树

       6:遍厉 Map:

                通过 map.keyset ,获取一个 set 集合,这个集合存储的都是 key 值,然后遍历这个 set ,通过 map.get() 遍厉。(遍厉的每一个结果来输出 value)。

Set<String> set = map.keyset();
for(String a : set){
    System.out.println("这是key:" + a + "这是value:" + map.get(a));
}

       7:

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值