针对13-集合框架的总结

(经验不足可能有的地方不是很耐看;请见谅!)

集合的迭代:()这里并没写普通for循环因为有的集合是没有下标的因此无法使用)

增强for循环for(String ele : collection){sout(ele);}不允许对集合中的元素进行修改,修改是无效的;增强for循环中不允许对集合的长度进行修改,否则会出现ConcurrentModificationException

迭代器:Iterator:一个接口,Collection中有一个方法iterator()可以获取这个接口的实现类对象:迭代器中,最初只想集合中下标为-1的元素,工作原理:循环调用next()方法进行向后元素的指向,并返回新的元素;同时向后进行遍历的过程中,使用hasNext()判断是否还有下一个元素可以迭代:

迭代器使用过程中:不应该对集合中的元素进行修改;不应该对集合中的长度进行修改;如果非要修改应该使用迭代器中的方法而不是集合中的方法;

Iterator<String> iterator = (集合对象)collection.iterator();

Collection的子接口List,Set,Queue

List是一个有序可重复的集合,集合中的每个元素都有其对应的顺序索引,从0开始;

List默认按添加元素的顺序设置索引;List集合里添加了一些根据索引来操作集合元素的方法;

ListIterator是Iterator接口的子接口:继承了Iterator中的所有方法;同时新添了自己的方法,允许使用List Iterator在进行元素迭代的时候,对集合中的数据进行修改,或者对集合的长度进行修改,同时使用List Iterator可以进行倒序的迭代;但是也只是能使用子接口中的方法而不是集合中的方法

Queue则是一个先进先出的队列结构,常用于任务调度和缓存管理。

Set是一个无序且不可重复的集合,通过哈希表实现,确保元素的唯一性;

Set的实现类包括:

HashSet:是Set接口的典型实现,大多数时候使用Set集合都使用这个实现类

HashSet的特点:

  1. 不能保证元素的排列顺序;Hash Set不是线程安全的;集合中的元素可以是null

当向HashSet集合中添加一个元素的时候,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值来决定该对象在HashSet中存储的位置

LinkedHashSet的特点:

LinkedHashSet是HashSet的子类,LinkedHashSet集合根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的;

LinkedHashSet插入性能略低于HashSet,但在迭代访问Set里的全部元素时有很好的性能;

依旧是不允许重复

TreeSet

TreeSet是用来对元素进行排序的,同样他也可以保证元素唯一。使用TreeSet时元素类型必须实现Comparable接口,向TreeSet中添加元素时的去重原理实际上是调用重写compareTo方法,并不是HashCode和equals方法

//需求:已创建四只猫在cats中,因为无序,现在将其添加到集合中进行年龄降序排序。

        Set<Cat> cs2 = new TreeSet<>(new Comparator<Cat>(){

            public int compare(Cat o1, Cat o2) {

                return o2.getAge() - o1.getAge();

            }

        });

        cs2.add(c1);

        cs2.add(c2);

        cs2.add(c3);

        cs2.add(new Cat(1));

        System.out.println(cs2);

Set接口没有新增的方法,所有方法都是从父接口Collecton中继承的

Comparable接口,想要使用该接口中的排序方法,需要实现该接口,int compareTo(T t),子类必须重写此抽象方法;

Collections是集合的工具类,提供了很多操作集合的方法,其中就有用于集合排序的sort方法:static void sort (List<T> list)

Comparator比较器接口:是当Java类已经实现了Comparable接口之后,比较规则已经确定,但是想临时改变比较规则就可以使用Comparator接口提供的方法int compare(T o1,T o2)

Collections中包括很多操作Set、List、Map等集合的工具类;

父接口Map

Map是集合框架中的另一个父接口,它用来保存具有映射(一对一)关系的数据,这样数据称之为键值对;key可以看成是value的索引:

Key和value必须是引用数据类型的数据;

作为key,在Map集合中不允许重复,value可以重复;

Key可以为null;

Key和value之间存在单向一对一关系,通过指定的key总能找到唯一,确定的value;

根据内部结构不同,Map接口有多种实现类,其中常见的有内部为hash表实现的HashMap和内部为排序二叉树实现的TreeMap

将一个字符串加入一个集合中并且输出每一个元素出现的次数        

// 遍历字符串中的每个字符

        for (char c : line.toCharArray()) {

            // 判断字符是否已在Map中

            if (map.containsKey(c)) {

                // 已存在:次数+1

                map.put(c, map.get(c) + 1);

            } else {

                // 不存在:初始化为1

                map.put(c, 1);

            }

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值