第九章、java集合

本文详细解读了Java中的List(如ArrayList, LinkedList), Set(如HashSet, LinkedHashSet, TreeSet)和Map(如HashMap, TreeMap, LinkedHashMap)的区别与操作方法,包括添加、删除、修改、查询和遍历。重点介绍了它们的内存结构、有序性、元素重复性和线程安全性。
摘要由CSDN通过智能技术生成

第九章、集合

在这里插入图片描述

存入相同性质的元素,其实是Object类型的数组,八种基本类型会转换成包装类再存放

在这里插入图片描述

List

LinkedList和ArrarList类

ArrayList内存连续存放,元素有序(按照元素存入的顺序存入元素),元素可以重复和为null,元素类型任意

查询和修改效率高,但是增加和删除效率低

LinkedList内存不连续,元素有序(按照放入的顺序存放元素),元素可以重复和null,元素类型任意

插叙和修改我效率低,但是增加和删除效率高

有三种迭代方式,普通for,增强for,利用iterator迭代遍历

增加方法
add()

直接在后面添加元素,如果写了索引值只能为最后一个元素加一的索引,不能跳跃添加

arr.add("hello");
arr.add(1,"hello");

删除方法

remove()
arr.remove(1);
arr.remove("hello");

可以根据元素或是下表删除元素

修改方法

set()

修改指定位置下标的值

arr.set(1,"world");

查询方法

indexOf()

查询集合中指定元素的下标

arr.indexOf("hello");
isEmpty()

判断集合是否为空

arr.isEmpty();

contains()

判断集合中是否包含此元素

arr.contains("hello");
retainAll()

在arr中保留在arr2中存在的元素

arr.retainAll(arr2);
size()

查询集合的长度

arr.size();

List子类Vector类

线程安全

Set

遍历方式有两种,增强for和利用iterator迭代

HashSet类

元素可以任意,元素可以为null,元素不可重复,元素无序(根据哈希值排序),没有下标

增加方法
add()
arr.add(10);

直接添加元素,没有下标

删除方法
remove()
arr.remove("hello");

删除指定元素

修改方法

没有修改方法,但是可以通过先把原元素删除,之后再添加一个新元素

查询方法
isEmpty()

判断集合是否为空

arr.isEmpty();
contains()

判断集合中是否包含此元素

arr.contains("hello");
retainAll()

在arr中保留在arr2中存在的元素

arr.retainAll(arr2);
size()

查询集合的长度

arr.size();
HashSet子类LinkedHashSet类

解决了HashSet无序的问题,方法一致

TreeSet类

用来存放一组相同类型的数据,在使用时使用泛型指定类型,

有两种比较方式,一种是在元素中直接实现Comparable接口,调用元素中的Comparato方法进行比较

另一种是创建比较类实现Comparator接口的比较器,在创建TreeSet对象时将比较器作为参数传递进去

元素有序(按照自然顺序进行比较),元素不可以重复,不可以为null,不可以为任意类型,没有下标

两种比较方式

增加方法
add()
arr.add(10);

直接添加元素,没有下标

删除方法
remove()
arr.remove("hello");

删除指定元素

修改方法

没有修改方法,但是可以通过先把原元素删除,之后再添加一个新元素

查询方法
isEmpty()

判断集合是否为空

arr.isEmpty();
contains()

判断集合中是否包含此元素

arr.contains("hello");
retainAll()

在arr中保留在arr2中存在的元素

arr.retainAll(arr2);
size()

查询集合的长度

arr.size();
两种比较方式
定义可比较的元素

在元素中实现COmparable接口,重写compareTo方法,此种比较方式只有有一个比较规则,一般不推荐

定义比较器

写一个类实现Comparator接口,重写compare方法,每个类代表一种比较方式,此种方式在创建TreeSet对象时要将比较器的对象作为参数传入

Map

键值对集合

HashMap类

key:元素可以为任意类型,可以为null,不可以重复,无序

value:元素可以为任意类型,可以为null,可以重复,元素无序

一般根据需求指明泛型

增加方法
put()

将键值对存入集合

hashMap.put("aaa",10);
删除方法
remove()
hashMap.remove("aaa");

可以根据键或者键值对来删除键值对

修改方法
put()
hashMap.put("aaa",20);

即可以是增加方法,也可以是修改方法

查询方法
size()
HaspMap.size();

查询键值对集合的长度

containskey()
hashMap.containsKey();

查看键值对集合里面是否有这个键

containsValue()
hashMap.containsValue();

查看键值对集合里面是否有这个值

isEmpty()
hashMap.isEmpty();

判断键值对集合是否为空集合

遍历

两种遍历方式,一种是先获取key集合,再通过key集合获取value来遍历

keySet()
//1.先获取key集合,再通过keySet集合获取balue遍历
        Set<String> keySet  =hashMap.keySet();
        //1.1增强for遍历
        System.out.println("-----增强for遍历----");
        for (String key : keySet) {
            System.out.println(key+":"+hashMap.get(key));
        }
        //1.2迭代器遍历
        System.out.println("-----迭代器遍历-----");
        Iterator<String> iter1 = keySet.iterator();
        while(iter1.hasNext()){
            String key = iter1.next();
            System.out.println(key+":"+hashMap.get(key));
        }

一种是直接获取键值对集合,再一次获取键值对

entrrySet()
//2.直接获取键值对集合,再通过键值对集合遍历键值对
        Set<Map.Entry<String,Object>> kAndVSet = hashMap.entrySet();
        //2.1增强for遍历
        System.out.println("------增强for-----");
        for (Map.Entry<String, Object> stringObjectEntry : kAndVSet) {
            System.out.println(stringObjectEntry.getKey()+":"+stringObjectEntry.getValue());
        }
        //2.2迭代器遍历
        System.out.println("----迭代器循环-----");
        Iterator<Map.Entry<String,Object>> iter2 =  kAndVSet.iterator();
        while(iter2.hasNext()){
            Map.Entry<String,Object> keyAndValue = iter2.next();
            System.out.println(keyAndValue.getKey()+":"+keyAndValue.getValue());
        }
HashMap的子类LinkedHashMap类

解决了HashMapkey无序的问题,方法一致

HashTable

键值都不能为null,线程安全,方法一致

TreeMap类

key:元素类型需要一致,不可以,不可以重复,有序[根据元素的自然顺序排序]

value:元素可以为任意类型,可以为null,可以重复,元素无序

一般根据需求指明泛型

自动根据key的自然顺序排序

增加方法
put()

将键值对存入集合

TreeMap.put("aaa",10);
删除方法
remove()
TreeMap.remove("aaa");

可以根据键或者键值对来删除键值对

修改方法
put()
TreeMap.put("aaa",20);

即可以是增加方法,也可以是修改方法

查询方法
size()
TreeMap.size();

查询键值对集合的长度

containskey()
TreeMap.containsKey();

查看键值对集合里面是否有这个键

containsValue()
TreeMap.containsValue();

查看键值对集合里面是否有这个值

isEmpty()
TreeMap.isEmpty();

判断键值对集合是否为空集合

遍历

两种遍历方式,一种是先获取key集合,再通过key集合获取value来遍历

keySet()
//1.先获取key集合,再通过keySet集合获取balue遍历
        Set<String> keySet  =TreeMap.keySet();
        //1.1增强for遍历
        System.out.println("-----增强for遍历----");
        for (String key : keySet) {
            System.out.println(key+":"+TreeMap.get(key));
        }
        //1.2迭代器遍历
        System.out.println("-----迭代器遍历-----");
        Iterator<String> iter1 = keySet.iterator();
        while(iter1.hasNext()){
            String key = iter1.next();
            System.out.println(key+":"+TreeMap.get(key));
        }

一种是直接获取键值对集合,再一次获取键值对

entrrySet()
//2.直接获取键值对集合,再通过键值对集合遍历键值对
        Set<Map.Entry<String,Object>> kAndVSet = TreeMap.entrySet();
        //2.1增强for遍历
        System.out.println("------增强for-----");
        for (Map.Entry<String, Object> stringObjectEntry : kAndVSet) {
            System.out.println(stringObjectEntry.getKey()+":"+stringObjectEntry.getValue());
        }
        //2.2迭代器遍历
        System.out.println("----迭代器循环-----");
        Iterator<Map.Entry<String,Object>> iter2 =  kAndVSet.iterator();
        while(iter2.hasNext()){
            Map.Entry<String,Object> keyAndValue = iter2.next();
            System.out.println(keyAndValue.getKey()+":"+keyAndValue.getValue());
        }

Util类

Arrays类

sort()

对数组进行排序

aslist()

将数组转换成List列表,被转换后的集合不可被改变

Collections类

sort()

将集合进行自然顺序排序

shuffle()

将集合中的元素打乱

Queue类

队列,先进先出

Stack

栈,先进后出

push(E e)

进栈

E Pop()

出栈

iterator()

生成一个迭代器对象来遍历集合元素

Iterator iter = arr.iterator();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值