集合类:List、Set、Map

集合类

1、List集合

List:元素是有序的,元素可以重复。因为该集合体系有索引。
  ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
  LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
  Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。

LinkedList:特有方法:
addFirst();
addLast();

getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException


在JDK1.6出现了替代方法。

offerFirst();
offerLast();


peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。

pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。

2、List集合特有迭代器:ListIterator

  ListIterator是Iterator的子接口

  在迭代时,不可以通过集合对象的方法操作集合中的元素。
  因为会发生ConcurrentModificationException异常。

  所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
  只能对元素进行判断,取出,删除的操作,
  如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

  该接口只能通过List集合的listIterator方法获取。

 

2.Set集合

Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
  HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
  HashSet是如何保证元素唯一性:
    是通过元素的两个方法,hashCode和equals来完成。
    如果元素的HashCode值相同,才会判断equals是否为true。
    如果元素的hashcode值不同,不会调用equals。

  TreeSet:可以对Set集合中的元素进行排序,底层数据结构是二叉树。 

    保证元素唯一性的依据:
        compareTo方法return 0.

TreeSet排序的第一种方式:让元素自身具备比较性。
    元素需要实现Comparable接口,覆盖compareTo方法。
    也种方式也成为元素的自然顺序,或者叫做默认顺序。

TreeSet的第二种排序方式。
    当元素自身不具备比较性时,或者具备的比较性不是所需要的。
    这时就需要让集合自身具备比较性。
    在集合初始化时,就有了比较方式。

package unit14;

import java.util.*;

class Studnet_2 implements Comparable<Object>{
	private String name;
	private int age;
	Studnet_2(String name, int age){
		this.name = name;
		this.age = age;
	}
	public String getName(){
		return name;
	}
	public int getAge(){
		return age;
	}
	//根据StreeSet底层数据结构,集合通过compareTo 方法实现元素一致性
	public int compareTo(Object obj){
		if(!(obj instanceof Studnet_2))
			throw new RuntimeException("这不是学生对象");
		Studnet_2 stu = (Studnet_2)obj;
		if(this.age > stu.age)
			return 1;
		if(this.age == stu.age)
			return this.name.compareTo(stu.name);
		return -1;
	}
	
}

public class TreeSetTest {
	public static void main(String args[]){
		TreeSet<Object> st = new TreeSet<Object>();
		st.add(new Studnet_2("asgasdg",21));
		st.add(new Studnet_2("gao",19));
		st.add(new Studnet_2("wang",24));
		st.add(new Studnet_2("lin",22));
		st.add(new Studnet_2("asgasdg",22));
		
		Iterator<Object> it = st.iterator();
		while(it.hasNext()){
			Studnet_2 stu = (Studnet_2) it.next();
			System.out.println(stu.getName()+ "....."+ stu.getAge());
		}
		
		
	}

}

  

3、Map集合

  Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
  HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
  TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1,添加。
put(K key, V value)
putAll(Map<? extends K,? extends V> m)

2,删除。
clear()
remove(Object key)

3,判断。
containsValue(Object value)
containsKey(Object key)
isEmpty()


4,获取。
get(Object key)
size()
values()

entrySet()
keySet()

 

posted @ 2015-06-28 21:03  池中月  阅读(163)  评论(0编辑  收藏  举报