java集合类,Collection接口、Set接口、List接口

类集
1.类集是动态对象数组。
2.数组由于长度固定,所以被类集取代。
3.Java集合类是数据结构的体现,简单的链表就是仿照Java集合类的。

Collection接口
1.在Java的类集(java.util包)里面,有两个核心的接口,Collection接口以及Map接口。
2.在jdk1.5以后,Collection的定义加上了泛型,防止出现ClassCastException(类型强制转换异常),里面所有数据的保存方式是相同的。
3.常用方法
add()数据添加
iterator()数据输出
4.很少直接使用Collection接口,因为他只是一个存储数据的标准,并不区分储存类型。
例如,要判断集合里的数据有没有重复,可以使用Collection的子接口Set()(不允许重复)以及List()(允许重复)。
5.集合类中的contains()&remove()方法需要equals()方法支持。

List接口
1.有特有的get()方法,可以根据索引获取数据。
2.占Collection应用的80%,优先考虑List接口,开发中不要直接用Collection接口。
3.List本身还是接口,要取得接口的实例化对象,就必须有子类,例如ArrayList、Vector、LinkedList。

ArrayList子类
1.一个针对List的数组实现。
2.基本操作
List<String> list = new ArrayList<>();
add();
size();
isEmpty();
contains();
remove();

集合与简单Java类
1.实际开发,集合里保存最多的就是简单java类。
2.其中remove()&contains()方法需要equals()方法的支持

public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return Objects.equals(name, person.name) &&
Objects.equals(age, person.age);
}

Vector
1.使用少。
2.重点:和ArrayList的区别
    历史时间:Vector是jdk1.0提供的,ArrayList是jdk1.2提供的
    处理形式:Vector同步处理,ArrayList异步处理
    数据安全:V线程安全,A非线程安全
    输出形式:ArrayList支持Iterator、ListIterator、foreach;V多一个Enumeration
3.优先考虑ArrayList,性能高,如果需要同步可以使用concurrent包提供的工具,将ArrayList变为线程安全的集合。

LinkedList子类
1.如果向父接口转型,使用形式与之前没有任何变化。
2.与ArrayList的区别:
    A封装的是数组,L封装的是链表。
    A时间复杂度是1,L时间复杂度是n。

Set接口
1.不允许重复,没有对Collection接口进行扩充,不想List接口没有get()方法。
2.两个常用子类:Hashset(无序)&TreeSet(有序)

HashSet子类和TreeSet子类

1.Set<string> set = new HashSet<>();   //注意HashSet后的<>
2.TreeSet子类使用升序排列完成。

TreeSet排序分析
1.可以利用TreeSet实现数据的排列处理操作。
2.对象所在的类一定要实现Comparable接口,覆写compareTo()方法。
3.用compareTo()比较,必须比较所有属性。
4.项目开发,如果一个类属性过多,就很麻烦,所以一般使用HashSet子类

重复元素判断
1.使用TreeSet子类进行数据保存,重复元素用Comparable接口判断
2.HashSet依靠Object类中两个方法:HashCode()&equals()
class Person implements Comparable<Person> {}在里面覆写HashCode和equals()方法,equals方法和上文中提到的一样。

public int hashCode() {
return Objects.hash(name, age);
}


3.对象判定必须hashCode()&equals()两者返回值都相同才行。

建议:保存自定义对象使用HashSet
    系统类信息使用TreeSet

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值