集合(List,Set)

集合Collection(接口)下有10个子类接口

其中主要学习两个List(列表) 和 Set(集合)

对于若干实现List的类来说,我们只学习三个(数组列表ArrayList,向量Vector,链表LinkedList)

对于刚学习集合的人来说,必须清楚类与类之间的关系,对于List而言,它本身是一个接口,它的实现类是实现了该接口,而继承的是AbstractCollection类,明显这是一个抽象类。

通过多态的方法可以定义Collection和List的对象,对于这两种集合,Collection有两种遍历方法(Iterator和增强for),

而List因为get()方法的存在,使得他多出一种普通for循环遍历,这也是它特有的。

List集合的特点:1.有序(储存和取出的顺序一致)2.可重复

List是线程不安全的,但可以使用Collections.synchronizedList()函数来使得变得线程安全。

相比Collection,List有特有的迭代器ListIterator listIterator();

Iterator迭代器没有添加方法,而其子类ListIterator有,即Iterator迭代器遍历元素时不能通过迭代器修改元素,而ListIterator可以。

   对上一段话进行总结,即迭代器迭代元素时,只有ListIterator可以修改元素。不过除此之外,用普通for,再使用集合自身的方法也是可以修改集合元素的。

ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,但效率高。

Vector(基本不用了):底层数据结构是数组,查询快,增删慢,线程安全,但效率低。

LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,但效率高。

 

 Set(集合)

虽然Set是非线程安全的,但是set的底层是使用Map实现的,顾可以通过ConcurrentHashMap和Collections.newHashSetFromMap的方式变通实现线程安全的Set

set是无序(储存顺序和取出顺序不一致),唯一(哈希表保持数据的唯一性)

对于Set集合,我们只学两个HashSet和TreeSet。这两个类同样是AbstractCollection的子类。

HashSet的底层是哈希表结构,哈希表结构底层是依赖hashCode()和equals()方法。子类LInkedHashSet,底层数据结构有哈希表和链表组成,哈希表保证唯一,链表保证有序(你懂有序的意思????)。

TreeSet能够按某种规则进行排序:排序有两种:1.自然排序 2.比较器排序

这里我需要介绍两个接口Comparable(内比较器)和Comparator(外比较器),前者是lang包下的接口,后者是util包下的接口。

这两个接口都是拿来排序的,Comparable中的compareTo(T o);和后者的compare(T t1,T t2)方法

至于这两个接口有啥区别,看好咯:前者方法因为只有一个参数,注定比较是要和this标明的变量比,所以一般写在泛型类中,即在类中就写好。而后一种一般在不能修改类时,又需要比较时通过匿名对象的方式,即让TreeSet集合的构造方法接受一个比较器接口的子类对象。

TreeSet<Student> ts = new TreeSet<Student>(new Comparator
<Student>(){  //让集合的构造方法接收一个比较器接口的子类对象
               @Override
             public int compare(Student s1,Student s2){
                   int num=s1.getName().length()-s2.getName.length();
                   int num2= num==0?s1.geName.compareTo(s2.getName()):num;
                   int num3= num2==0?s1.getAge()-s2.getAge():num2;
                   return num3;
             }
    } 

补充:A自然排序 compareTo() 在引用类型对象中重写compareTo方法,并在该对象类中实现Comparable接口,compareto( T o):比较此对象与指定对象之间的顺序,如果对象小于,等于,大于指定对象,则分别返回负整数,0,正整数

 

 

 

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值