黑马程序员技术交流社区

标题: 集合类:List、Set、Map [打印本页]

作者: 池中月    时间: 2015-7-5 17:47
标题: 集合类: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()







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2