存储方式称为:数据结构。
堆栈:先进后出。(如同杯子)
队列:先进先出。(如同管子)
Collection
|---->List:元素师有序的,元素可以重复。因为该集合体现有索引。
|---->ArrayLIst:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删稍慢。线程不同步
|---->LinkedLIst:底层使用的链表数据结构。特点:增删速度快,查询稍慢。
|---->Vector:底层是数组数据结构。线程同步,被ArrayList替代了。
|---->Set:元素是无序的,元素不可以重复。
|---->HashSet:底层数据结构式哈希表。
HashSet是如何保证元素唯一性的呢?
如果元素的hashcode值相同,然后判断equals是否为true。
如果元素的hashcode值不同,就会调用equals。
注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和eauals方法
|---->TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。保证元素唯一性的依据:compareTo方法Return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。这称为自然排序或默认排序。
TreeSet的第二种排序方式。当元素自身不具备比较性时,
或者具备的比较性不是所需要的。这时就需要集合自身具备比较性 ,
在集合初始化时,就有了比较方式。
当两种排序都存在时,以比较器为主。
定义一个类,实现Comparator接口,覆盖compare方法。
Map
HashTable:底层是哈希表数据结构,不可以存入null值,线程同步的。效力低
HashMap: 底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的,效率高
TreeMap:底层是二叉树数据结构,线程不同步,可以使用map集合中的键进行排序。
Collections没有构造方法,里面全是静态方法。可以操作list集合。
方法的可变参数一定要定义在括号的最后一个参数。
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
《?》通配符,可以理解为占位符。
泛型的限定:
? extends E:可以接收E类型或者E的子类。上限。
? super E:可以接收E类型或者E的父类型。下限。
泛型限定是用于扩展用的。
TreeSet 案例:
package com.six;
import java.util.*;
public class TreeSetDemo
{
/**
* @param args
*/
public static void main(String[] args)
{
TreeSet ts = new TreeSet(new StringLengthComparator());
ts.add("abc");
ts.add("aaa");
ts.add("asdf");
ts.add("zxcvcv");
ts.add("klsjdfkhse");
ts.add("aa");
for(Iterator iter = ts.iterator();iter.hasNext();)
{
System.out.println(iter.next());
}
}
}
class StringLengthComparator implements Comparator
{
@Override
public int compare(Object o1, Object o2)
{
String str1 = (String)o1;
String str2 =(String)o2;
int num = new Integer(str1.length()).compareTo(new Integer(str2.length()));
if(0==num)
return str1.compareTo(str2);
return num;
}
}
先实现字母长度排序然后再利用字母排序。