Java中常用的集合

本文介绍了Java中的集合框架,包括泛型的概念及其在避免类型转换和增强安全性方面的作用。文章对比了集合与数组的区别,如集合长度可变、存储对象等,并详细讲解了单列集合(如List、Set)和双列集合(如Map)的不同实现类,如ArrayList、LinkedList、HashSet以及HashMap的特性与底层实现。此外,还展示了如何使用这些集合的常见操作,如添加、删除、遍历等。
摘要由CSDN通过智能技术生成

集合

集合是java中提供的一种容器,可以用来存储多个数据,并且可以存储任意类型的数据!

### 泛型在这简单说一下

泛型是什么,,泛型就是可以在类或方法中预支地使用未知的类型。
使用泛型最大的好处就是可以避免类型强制转换的问题,同时也能增强程序的安全性
他主要是配合集合使用,在集合类后面加上<>,括号里面写上数据类型,说明集合里面存储的元素只能是该数据类型
//例如
List<Student> list = new ArrayList<>();//这就表示该list集合只能存储Student类型的数据
  • 集合和数组的区别

    • 数组的长度是固定的。集合的长度是可变的。
    • 数组中存储的是同一类型的元素,可以存储基本数据类型值。
    • 集合存储的都是对象。而且对象的类型可以不一致,不能存放基本数据类型
  • 集合分为两类

    • 第一类是单列集合 collection 单列集合包含set(无序的,不允许存入重复元素。)集合和List集合(索引精确控制序列中元素,可以存入相同的元素)

      List 有序的,有一个索引,可以通过索引获取元素,可以存入相同元素

      ​ ArrayList 底层是数组,每次进行数据添加和删除,都会生成一个新数组,原数组中的内容copy到新数组中,再进行新内容的追加

      ​ 特点:查询速度快,但是添加和删除操作效率较低

      ​ LinkedList 底层是链表,查询速度慢,添加和删除效率高

      ​ Vector 底层也是数组,他线程安全,效率

      Set 无序的,不可以存入相同元素

      ​ HashSet 底层使用HashMap进行的内容存储,数据结构为哈希表形式。

      ​ LinkedHashSet 底层是哈希表和链表,会根据元素的插入顺寻进行排序

      ​ TreeSet 底层树结构,不能存入null值,且存入值时,需要存入具有转换关系的值。该集合中会对值进行升序排序。

    • 第二类是双列集合 Map ----是以键值对的形式进行存储数据的

      ​ HashMap 底层 哈希表结构, 键允许存入一个null, 值允许多null.存在

      ​ LinkedHashMap 底层是链表+哈希表结构。 在HashMap的基础上记录添加的顺序。

      ​ TreeMap 底层是红黑树结构,根据键的大小进行排序,键不允许存储null.

      ​ HashTable 底层是哈希表 。 线程安全。

      ​ 与HashMap比较:

      ​ HashMap:线程不安全,效率高;

      ​ HashTable:线程安全,效率低.

集合的构建和方法

  • 没有索引的单列集合 collection

//1.构建collection对象,collection是一个接口是一个特殊的父类,用他的实现类来构建一个collection对象
Collection collection = new ArrayList<>();
//2.collection常用方法
//2.1 add方法,向collection集合中添加一个元素
collection.add("abcde");
collection.add("abcde");
collection.add("dada");
collection.add(new Date());
collection.add("上山打老虎");
Collection collection1 = new ArrayList<>();
collection1.add("12345");
collection1.add("iKun");
collection1.add("dada");
//2.2 addAll方法,向collection对象里加入批量加入元素(并入一个新的集合)
collection.addAll(collection);
//2.3删除集合中的一个元素
collection.remove("dada");
//2.4删除集合中的元素根据传入的集合
collection.removeAll(collection1);
//2.5 判断集合中是否包含某一个元素 返回值是布尔类型
boolean b = collection.contains("adcde");
//2.6 判断集合是否包含另一个集合
collection.containsAll(collection1);

//2.7遍历集合,,,构建一个迭代器对象来遍历
Iterator iterator = collection.iterator();
while (iterator.hasNext()){
       System.out.println(iterator.next());
}
  • 带索引的单列集合 list

//1.构建collection对象,用List接收,他是collection的一个子接口,可以通过索引访问集合中的元素
List list = new ArrayList<>();
//2.collection常用方法
//2.1 add方法,向collection集合中添加一个元素
list.add(0,"郭八");
list.add(1,"张三");
//再次在第一个位置添加,会本原来的第一个位置的元素给挤下去,让原来的往后移动
list.add(1,"王五");
list.add(2,"李四");
List list1 = new ArrayList<>();
list1.add(0,"李四");
list1.add(1,"七七");

//2.2 addAll方法,向collection对象里加入批量加入元素(并入一个新的集合)
list.addAll(0,list1);
//2.3删除集合中的一个元素
list.remove("张三");
//2.4删除集合中的元素根据传入的集合
boolean b = list.removeAll(list1);
//2.5修改对应索引的内容
list.set(0,"张四");
//2.5 判断集合中是否包含某一个元素 返回值是布尔类型
boolean b = list.contains("adcde");
//2.6 判断集合是否包含另一个集合
list.containsAll(list1);

//2.7遍历集合,,,构建一个迭代器对象来遍历
Iterator iterator = collection.iterator();
while (iterator.hasNext()){
       System.out.println(iterator.next());
}
//2.8加强for循环遍历集合
for (Object obj : list){
    
}
  • Set集合 HashSet

 //用hashset实现类来构建set对象
        HashSet set = new HashSet<>();
        //在set集合里添加元素
//set.addAll();
        set.add("张三");
        set.add("李四");
        //查看集合的大小
        set.size();
        //删除集合中的一个元素
        set.remove("");
        //判断集合中是否包含某一个元素 返回值是布尔类型
        set.contains("李四");
        //判断集合是否包含另一个集合
        //set.containsAll(集合名)
  • map集合

  //创建一个map对象,一般用HashMap实现类来构建map对象,双列集合一般是用键值对存放数据

        Map map = new HashMap<>();

        //在双列集合里放数据
        map.put("姓名","张三");
        map.put("性别","🚺♀");

        Map map1 = new HashMap<>();
        // 把 指定的map集合复制到此集合
        map1.putAll(map);
        //System.out.println(map1);

        //从map集合里删除一个给定键的映射
        map.remove("姓名");
        System.out.println(map);

        //修改 直接使用put覆盖原来的键值对,map中的key不能重复,一旦重复覆盖原有的值
        map.put("姓名","111把");
        System.out.println(map);

        //查询集合中的map键值对数量
        int  i = map.size();
        System.out.println(i);
        //要获取map里面值,可以通过键来获取
        //单个获取
        Object obj= map.get("性别");
        System.out.println(obj);

        //获取集合中所有的value值
        Collection values = map.values();
        System.out.println(values);

        //获取双列集合里面的键  set集合里面不允许放入重复的元素,map的key也不允许放入重复的
        Set set = map.keySet();
        System.out.println(set);

        //遍历键所在的集合来遍历map集合里面的值,获取所有的键名和键值
        System.out.println("遍历键所在的集合来遍历map集合里面的值");
        for (Object ob:set){
            System.out.println(map.get(ob));
        }

        //调用map的entrySet()方法,把map中的键值放到set集合里
        Set set1 = map.entrySet();
        for (Object o : set1) {
            Map.Entry entry = (Map.Entry) o;
            entry.getValue();
            System.out.println(entry.getKey());
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值