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

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

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

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

查看所有标签

猜你喜欢:

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

Haskell Programming from first principles

Haskell Programming from first principles

Christopher Allen、Julie Moronuki / 2015 / USD 59.00

I am writing this book because I had a hard time learning Haskell. It doesn't have to be that way. I've spent the last couple years actively teaching Haskell online and in person. Along the way, I ......一起来看看 《Haskell Programming from first principles》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码