JAVA集合框架(二)-List和Set

栏目: Java · 发布时间: 5年前

内容简介: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]]

关注蚂蚁编程 ↓

JAVA集合框架(二)-List和Set

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Web Designer's Idea Book

The Web Designer's Idea Book

Patrick Mcneil / How / 2008-10-6 / USD 25.00

The Web Designer's Idea Book includes more than 700 websites arranged thematically, so you can find inspiration for layout, color, style and more. Author Patrick McNeil has cataloged more than 5,000 s......一起来看看 《The Web Designer's Idea Book》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具