关于集合List和Set

List:可存入重复的值

ArrayList<E>:存储结构数组结构

按下标遍历元素效率较高,按下标查找元素效率较高,可以自动扩容

插入删除效率低,按元素内容查找效率低,线程不安全

创建时初始值默认大小为0,后续当调用增加方法时,默认大小扩到10,

之后再需要扩容时一般是之前的1.5倍(通过移位运算符>>计算得出的1.5倍),

但会去先确认这个扩完1.5倍大小时是否够用(比如说,之前的Arraylist大小是1,扩到1.5倍后还是1容量(1.5会取整成1),这时便会扩容成之前Arraylist容量+1的容量

但扩容时不会超过可扩容的最大容量(Integer.MAX_VALUE-8),

如果超过了这个数,则先去确认之前的Arraylist容量+1(即最小需要的容量)是否超过了

Int所能存储的最大大小,超过了的话会抛出OutOfMemoryError的异常,

否则在确认是否超过了(Integer.MAX_VALUE-8),超过了则返回int所能存储的最大数(2的32次方-1),否则返回(Integer.MAX_VALUE-8)。

Vector:存储结构为数组结构

按下标遍历元素效率较高,按下标查找元素效率较高,可以自动扩容

插入删除效率低,按元素内容查找效率低,线程安全

构造器可以传入初始容量大小(不传默认为0),容量增量(不传默认为0,即翻一番),和arraylist差不多,区别仅仅是增量,以及当为初始容量0时,扩增时是0+1而不是10.

LinkedList:存储结构为双向链表结构

增加删除快,查找慢,可以通过方法addFirst()和addLast()从两端往里存,跟栈的数据结构一样,先进后出

Set:不可存入重复的值

HashSet:散列存储(其实是基于hash表的方式进行存储)

通过add()方法存放,可以用迭代器iterator去取出。

Hashset<Integer> set=new HashSet<>();

Interator<Integer> in=set.interator();

System.out.println(In.next());

TreeSet:会根据存放的值进行排序存储.

如下是使用方法,通过这段代码便可得知TreeSet会根据存放的值进行排序存储的特性:

TreeSet<Integer>t=new TreeSet<>();

t.add(2);

t.add(3);

t.add(1);

for(Integer a:t){

    System.out.println(a)

}

结果为:

1

2

3

但如果是想用TreeSet存放自己定义的类,那么此类需要实现Comparable<E>接口并实现Camparable的compareTo方法

原因也是因为TreeSet会根据存放的值进行排序存储,compareTo方法就是去定义要定义的类的排序的方法,如:

TreeSet<Person>p=new TreeSet;//用TreeSet存储Person类

Public class Person implement Camparable{

    private int age;

    //this与o进行比较,返回的数据:负数 表示this小;
    //零表示相同,但由于Set的不可储存重复值的特性所以不会再进行存放
    //正数则表示this大
    public int compareTo(Person o){

        if(this.age>o.age){//用age元素进行比较,年龄小的将在treeSet存储位置靠前

            return 1;

        }else if(this.age==0.age){

            return 0;

        }

    return -1;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值