概述
集合,对于我个人可以理解为封装好的数据结构,直接拿来用即可,java提供了各种方法(函数),看似繁多的操作,其实要知道,这些方法越多,就意味着程序员这边要做的事情就越少。
终于不用像在C语言那边一样,啥都要自己手写了。
Set就是扔到一起就完事了,决不可重复(高一数学里面的集合就是这个性质);
List完全可以用数组理解,索引就是下标;
Map就是一一对应,key(x)–value(y),好比高中函数,一个x只能有一个y,一个y却可以不止一个x。
这两张图,非常生动形象地阐述了这个家族的关系图。
接口,可以理解为BUFF,加了个implements XXX接口,你就可以用XXX接口的各种加成效果了
Collection
以下内容都是Collection都可以用的,非常普及
Iterator
用来遍历的,和for平起平坐
- boolean hasNext():如果被迭代的集合元素还没有被遍历完,则返回 true。
- Object next():返回集合里的下一个元素。
- void remove():删除集合里上一次next方法返回的元素。
- void forEachRemaining(Consumer action),这是Java 8为Iterator新增的默认方法,该方法可使用
Predicate
可以批量删除,过滤
这行代码,可以过滤调所有长度小于10的内容
foreach遍历
for循环的简便写法:
//创建一个集合
var books=new HashSet();
books.add("轻量级Java EE企业应用实战");books.add("疯狂Java讲义");
books.add(“疯狂Android讲义");
for (var obj : books)
{//此处的book变量也不是集合元素本身var book=(String) obj;
System.out.println (book);
if(book.equals("疯狂Android讲义"))
{//下面代码会引发ConcurrentModificationException异常
//books.remove(book);
}
}
for内部的obj其实只是个临时装东西的
每次就把当前遍历的遍历装起来、呈现一下。
var obj :books books就是被遍历的集合
Set系列
HashSet类
Set最基本的,大部分用这个
- 不保证元素顺序
- 元素可以为null
- 不是同步,多线程不安全
这里面判断俩元素是否相等
equals()和hashCode()的返回值都要看,都一样才是同一个!
要是重写这些方法,必须注意。
一般要保证hashCode非常独一无二,基本用各种数学随机方法保证
LinkedHashSet类
属于HashSet的子类
以链表的形式存储。
TreeSet类
顾名思义,是树的类型
而且加进去的话,就自动给你变成了二叉排序树
注意不能重复,不然加不进去
而且加内容,必须同一个类型。
Comparator 是一种接口,可以自定义排序。
语法如下:
c.compare(e1, e2)==0