内容简介:list集合是有序的,顺序即添加的顺序,元素是可重复的。底层基于数组实现。在add元素的过程中,如果超过了数组容量,会自动扩容。主要特点:随机访问快(数组的特性),但是在中间插入和移除元素时较慢(涉及数组拷贝动作)。
list集合是有序的,顺序即添加的顺序,元素是可重复的。
- ArrayList
- LinkedList
- Vector
ArrayList
底层基于数组实现。在add元素的过程中,如果超过了数组容量,会自动扩容。
主要特点:随机访问快(数组的特性),但是在中间插入和移除元素时较慢(涉及数组拷贝动作)。
LinkedList
底层基于链表数据结构设计。 主要特点:在中间插入和删除操作快。但是随机访问较慢(需要遍历node指针)。 LinkedList的一些专有方法:
- void addFirst(E e) 将指定元素添加到此集合的开头
- void addLast(E e) 将指定元素添加到此集合的末尾
- E getFirst() 返回此集合的第一个元素
- E getLast() 返回此集合的最后一个元素
- E removeFirst() 删除此集合中的第一个元素
- E removeLast() 删除此集合中的最后一个元素
Vector的实现类似ArrayList。只是Vector是线程安全的。它的大部分方法都加了同步锁synchronized
Set的常用实现类
set集合不保存重复的元素。
- HashSet
- TreeSet
- LinkedHashSet
HashSet
HashSet按照Hash算法存储集合中的元素,具有很好的存取和查找性能。 通过元素的hash()和equals()方法来判断元素是否重复。因此,HashSet中元素的存储顺序是和元素的添加顺序不一样的。
LinkedHashSet
LinkedHashSet是HashSet的子类。使用链表来维护元素的添加次序,因此存储顺序就是元素的添加顺序。
TreeSet
底层元素存储基于红黑树数据结构实现。TreeSet保证了存入集合中的元素处于有序状态。这种有序可以是自然 排序 和定制排序。 自然排序:
TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后让集合按照升序排列。 加入集合中的元素需要实现Comparable接口,重写compareTo()。
public class Person implements Comparable<Person>{ private String name; private int age; public Person(String name, int age){ this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } public void setAge(int age) { this.age = age; } // 按年龄排序 public int compareTo(Person person) { int ret = (this.age - person.age); return ret; } } 测试类: public class setMain { public static void main(String[] args) { Set<Person> personSet = new TreeSet<Person>(); personSet.add(new Person("张三",10)); personSet.add(new Person("王五",23)); personSet.add(new Person("李四",15)); System.out.println(personSet); } } 复制代码
输出:
[Person [name=张三, age=10], Person [name=李四, age=15], Person [name=王五, age=23]]
定制排序:
如果要定制排序,需要在TreeSet构造器中传入Comparator比较器。
public class NameComparator implements Comparator<Person>{ public int compare(Person person1, Person person2) { return person1.compareTo(person2); } } 测试类: public class setMain { public static void main(String[] args) { Set<Person> set = new TreeSet<Person>(new NameComparator()); set.add(new Person("张三",10)); set.add(new Person("王五",23)); set.add(new Person("李四",15)); System.out.println(set); } } 复制代码
输出:
[Person [name=张三, age=10], Person [name=李四, age=15], Person [name=王五, age=23]]
关注蚂蚁编程 ↓
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。