集合

概要

List , Set, Map都是接口,前两个继承至collection接口,Map为独立接口
Set下有HashSet,LinkedHashSet,TreeSet等实现方法
List下有ArrayList,Vector,LinkedList等实现方法
Map下有Hashtable,LinkedHashMap,HashMap,TreeMap等方法
关系如图:
集合_第1张图片

总结:

— List 有序,可重复

ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
LinkedList
优点: 底层数据结构是链表,查询慢,增删快。

Set 无序,唯一

HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()

LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一

TreeSet
底层数据结构是红黑树。(唯一,有序)

  1. 如何保证元素排序的呢?
    自然排序
    比较器排序
    2.如何保证元素唯一性的呢?
    根据比较的返回值是否是0来决定

TreeSet的两种排序方式
1.以普通数字来进行排序

public class MyClass {

    public static void main(String[] args) {
        // 创建集合对象
        // 自然顺序进行排序
        TreeSet ts = new TreeSet();

        // 创建元素并添加
        // 20,18,23,22,17,24,19,18,24
        ts.add(20);
        ts.add(18);
        ts.add(23);
        ts.add(22);
        ts.add(17);
        ts.add(24);
        ts.add(19);
        ts.add(18);
        ts.add(24);

        // 遍历
        for (Integer i : ts) {
            System.out.println(i);
        }
    }
}



2.以对象为例排序

public class Students implements Comparable{
	private String name;
	private int age;
	public Students() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Students [name=" + name + ", age=" + age + "]";
	}
	

	public Students(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}


	
	
	
	public int compareTo(Students o) {//重写了比较算法
		if(this.ageo.age) {
			return -1;
		}
		else {
			return this.name.compareTo(o.name);
		}
		
		
	}


	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	public int getAge() {
		return age;
	}


	public void setAge(int age) {
		this.age = age;
	}
	}

import java.util.Set;
import java.util.TreeSet;

public class JavaCollectDemo {
	public static void main(String[] args) {
	Set all = new TreeSet();
	all.add(new Students("张飞",28));
	all.add(new Students("张三丰",100));
	all.add(new Students("关羽",32));
	all.add(new Students("刘备",35));
	all.add(new Students("诸葛亮",20));

	all.add(new Students("曹操",100));
	all.add(new Students("曹操",100));
	for(Students students:all){
		System.out.println("名字为"+students.getName()+"   "+students.getAge());
	}
	
	} 
}

你可能感兴趣的:(集合)