第五节:Java中常用数据集合
List
public interface List<E>extends Collection<E>
有序的 collection(也称为序列),允许重复的元素。
常用实现类:
- ArrayList:
底层使用的是数组结构,特点:查询速度快,增删操作较慢,而且线程不同步.
要保证同步,可以使用:List list = Collections.synchronizedList(new ArrayList());进行包装,默认容量为10.
常用方法:add,addAll,remove,indexOf,subList,contains,isEmpty…
容易忽略的方法:trimToSize()//修正容量大小,用多少,给多少,ensureCapacity(int minCapacity)//预设大小
- LinkedList
使用双向链表实现存储,允许所有元素(包括 null)。非线程安全,要保证同步,可以使用List list = Collections.synchronizedList(new LinkedList());进行包装,可以被当作堆栈和队列来使用。
- Vector
也是一个有序集合,允许重复元素,并且线程安全.
Map
- HashMap
基于哈希表的 Map 接口的实现,存储键值对,键是唯一的,允许使用 null 值和 null 键,非同步(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同),同步可以使用Map m = Collections.synchronizedMap(new HashMap(...));
常用方法:
- 添加。 put(key,value):当存储的键相同时,新的值会替换老的值,并将老值返回。如果键没有重复,返回null。 void putAll(Map);
- 删除。 void clear():清空 value remove(key) :删除指定键。
- 判断。 boolean isEmpty(): boolean containsKey(key):是否包含key boolean containsValue(value) :是否包含value
- 取出。 int size():返回长度 value get(key) :通过指定键获取对应的值。如果返回null,可以判断该键不存在。 当然有特殊情况,就是在hashmap集合中,是可以存储null键null值的。
Collection values():获取map集合中的所有的值。
- HashTable
底层是哈希表数据结构,不可以存入null键null值,是线程同步的.
Hashtable 的实例有两个参数影响其性能:初始容量 和加载因子(默认.75)
Set
- HashSet
底层数据结构是哈希表(实际上是一个 HashMap 实例),允许使用 null 元素,唯一且无序,非线程安全.通过元素的hashcode和equals来保证元素的唯一性。如果元素的hashcode值相同,才会判断equals是否为true; 如果元素的hashcode的值不同,不会调用equals。
Collections
提供对集合进行操作的一个包装器,实现对集合的查找、排序、替换、 线程安全化(将非同步的集合转换成同步的)等操作。常用方法:
Collections.max(list);//返回list中字典顺序最大的元素。
int index = Collections.binarySearch(list,”zz”);//二分查找,返回角标。必须是有序的
Collections.fill();//可以将list集合中的所有元素替换成指定元素。
Collections.repalceAll(list,”要被替换的”,”替换的值”);//可以将list集合中的指定元素替换成指定元素。 Collections.reverse(); 反转
Collections.reverseOrder(参数是比较器);//逆向反转排序。倒序。。
Collections.shuffle(list);//随机对list中的元素进行位置的置换。
synchronizedXXX(XXX);非同步集合转成同步集合的方法:
Arrays
用于操作数组对象的工具类,里面都是静态方法。
Arrays.asList:可以从 Array 转换成 List。可以作为其他集合类型构造器的参数。
Arrays.binarySearch:在一个已排序的或者其中一段中快速查找。
Arrays.copyOf:如果你想扩大数组容量又不想改变它的内容的时候可以使用这个方法。
Arrays.copyOfRange:可以复制整个数组或其中的一部分。
Arrays.deepEquals、Arrays.deepHashCode:Arrays.equals/hashCode的高级版本,支持子数组的操作。
Arrays.equals:如果你想要比较两个数组是否相等,应该调用这个方法而不是数组对象中的 equals方法(数组对象中没有重写equals()方法,所以这个方法之比较引用而不比较内容)。
Arrays.fill:用一个给定的值填充整个数组或其中的一部分。
Arrays.hashCode:用来根据数组的内容计算其哈希值(数组对象的hashCode()不可用)。
Arrays.sort:对整个数组或者数组的一部分进行排序。也可以使用此方法用给定的比较器对对象数组进行排序。
Arrays.toString:打印数组的内容。