集合类 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()
|