集合的类型与各自的特性

集合

1.1 集合的类型与各自的特性

集合关系结构


---|Collection: 单列集合

      ---|List: 有存储顺序,可重复

      ---|ArrayList: 数组实现, 查找快, 增删慢由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素.所以慢。数组是可以直接按索引查找,所以查找时较快

      ---|LinkedList: 链表实现, 增删快, 查找慢由于链表实现,增加时只要让前一个元素记住自己就可以,删除时让前一个元素记住后一个元素,后一个元素记住前一个元素.这样的增删效率较高但查询时需要一个一个的遍历,所以效率较低

      ---|Vector: 和ArrayList原理相同,但线程安全,效率略低和ArrayList实现方式相同,但考虑了线程安全问题,所以效率略低

      ---|Set: 无存储顺序,不可重复

     ---|HashSet   线程不安全,存取速度快。底层是以哈希表实现的。

     ---|TreeSet   红-黑树的数据结构,默认对元素进行自然排序(String)。如果在比较的时候两个对象返回值为0,那么元素重复。

    2.TreeSet内添加元素,如果元素不具备自然排序的特性那么元素所属的内就必须实现Comparable接口,重新定义规则在compareTo方法上.或者用匿名内部类的方式自定义比较方式;定义比较器Comparator。

   1.实现Compareble接口重写conpareTo方法

class Student implements Comparable<Student >{

//我们对学生进行排序,先按年龄,再按照名字的自然顺序

@Override
public int compareTo(Student o1) {
// TODO Auto-generated method stub
if(this.age>o1.age){

return 1;
}
if(this.age<o1.age){
return -1;
}
else{
return this.getName().compareTo(o1.getName());
}

}

}

2.TreeSet用匿名内部类的方式自定义比较方式;定义比较器Comparator

TreeSet <Student> treeSet=new TreeSet<>(new Comparator<Student>() {


@Override
public int compare(Student o1, Student o2) {
if (o1.getAge()-o2.getAge()>0) {
return 1;
}
else if (o1.getAge()-o2.getAge()<0) {
return -1;
}
else {

return o1.getName().compareTo(o2.getName());
}

}
});

3.测试

treeSet.add(new Student(20, "赵六"));
treeSet.add(new Student(50, "张三"));
treeSet.add(new Student(15, "王五"));
treeSet.add(new Student(44, "历史"));
treeSet.add(new Student(20, "丁三"));
Iterator<Student> iterator =treeSet.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());

}

输出:


---| Map: 键值对   键不可重复,值可以重复

     ---|HashMap    线程不安全,存取速度快。底层是以哈希表实现的.

     ---|TreeMap   红-黑树的数据结构,默认对元素进行自然排序(String)。如果在比较的时候两个对象返回值为0,那么元素重复

     ---|HashTable  底层也是使用了哈希表 维护的,存取的读取快,存储元素是无序的。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值