- 论坛徽章:
- 0
|
Java 数组与容器
所有数组都有一个固定属性 length (数组容量)。
数组的效率比其他容器都高,且如果是要保存基本类型,只能用数组。
但容量固定,无法判断其中实际存有多少元素。
基本类型的数组,数组元素的值直接存储在对应的数组元素中。参看 http://book.51cto.com/art/200809/89195.htm
引用类型的数组,数组元素是引用。参看 http://book.51cto.com/art/200809/89196.htm
java.lang.System
java.util.Arrays
Java代码- System.arraycopy() // 从一个数组复制到另一个数组
- Arrays.asList() // 数组转换为List
- Arrays.fill() // 用某个值填充数组,可以指定位置进行填充
- Arrays.sort() // 对数组排序,可以设定比较器
- Arrays.binarySearch() // 如果能找到返回 >= 0 的值,否则 < 0 的值
- Arrays.equals() // 比较两个数组是否相等
- Arrays.copyOf() // 原数组复制到一个新数组,返回新数组
复制代码 容器中的元素都是对象的引用。
Collection 保存单个元素,而 Map 保存相关联的键值对。
List 和 Set 都继承自 Collection 接口。
List接口:元素有顺序,元素可以有重复。
Java代码- // 在List末尾添加一个元素
- boolean add(E e)
- // 在指定的位置添加元素
- void add(int index, E element)
- // 删除指定位置的元素,返回删除的那个元素
- E remove(int index)
- // 删除第一次出现在List中的元素,如果有,返回true
- boolean remove(Object o)
- // 删除List中所有元素
- void clear()
- // 返回List中指定位置的元素
- E get(int index)
- // 用新元素替换指定位置的元素,返回被替换的元素
- E set(int index, E element)
- // 返回List中第一次出现指定元素的位置,否则返回 -1
- int indexOf(Object o)
- // 返回List中最后第一次出现指定元素的位置,否则返回 -1
- int lastIndexOf(Object o)
- // 如果List中包含这个元素,返回true
- boolean contains(Object o)
- // 如果List为空,返回true
- boolean isEmpty()
- // 返回List中元素的个数
- int size()
- // List转换为数组
- Object[] toArray()
复制代码 List实现类常用的有 ArrayList 和 LinkedList。
ArrayList:可以将它理解成一个可增长的动态数组,随机访问速度快。
LinkedList:链表实现的,在任何地方插删很方便。
LinkedList 增加的方法
Java代码- // 在开头添加元素
- void addFirst(E e)
- // 在末尾添加元素
- void addLast(E e)
- // 返回第一个元素
- E getFirst()
- // 返回最后一个元素
- E getLast()
- // 删除并返回第一个元素
- E removeFirst()
- // 删除并返回最后一个元素
- E removeLast()
复制代码 Set接口:每个元素都是唯一的,不保存重复的元素,因此加入Set的Object必须定义equals()方法以确保对象的唯一性。
Java代码- // 如果新添加元素已经存在了,返回false
- boolean add(E e)
- // 删除Set中所有元素
- void clear()
- // 如果Set中包含指定元素,返回true
- boolean contains(Object o)
- // 如果Set为空,返回true
- boolean isEmpty()
- // 删除指定元素,如果有,返回true
- boolean remove(Object o)
- // 返回Set中的元素个数
- int size()
- // Set转换为数组
- Object[] toArray()
复制代码 Set实现类常用的有 HashSet、LinkedHashSet 和 TreeSet。
HashSet:散列表实现,具有高效查询速度,需要实现hashCode()方法。
LinkedHashSet:内部使用散列以加快查询速度,同时使用链表维护元素插入的次序,在使用迭代器遍历Set时,结果会按元素插入的次序显示。
TreeSet:基于红黑树实现,维护元素存储顺序,需要实现Comparable接口。
TreeSet 增加的方法
Java代码- // 返回大于指定元素的最小元素,否则返回 null
- E higher(E e)
- // 返回小于指定元素的最大元素,否则返回 null
- E lower(E e)
- // 返回大于等于指定元素的最小元素,否则返回 null
- E ceiling(E e)
- // 返回小于等于指定元素的最大元素,否则返回 null
- E floor(E e)
- // 返回第一个元素(最小的元素)
- E first()
- // 返回最后一个元素(最大的元素)
- E last()
- // 删除并返回第一个元素(最小的),如果Set为空,返回null
- E pollFirst()
- // 删除并返回最后一个元素(最大的),如果Set为空,返回null
- E pollLast()
复制代码 java.util.Collections
Java代码- Collections.max(Collection c) // 返回容器最大的元素
- Collections.min(Collection c) // 返回容器最小的元素
- Collections.disjoint(Collection<?> c1, Collection<?> c2) // 如果两集合没有相同元素,返回 true
- Collections.frequency(Collection<?> c, Object o) // 返回集合中指定元素的个数
- Collections.sort(List<T> list) // 对List进行排序,还可以设定Comparator
- Collections.binarySearch(List list, T key) // 如果能找到返回 >= 0 的值,否则 < 0 的值
- Collections.fill(List<? super T> list, T obj) // 用指定元素填充List所有元素
- Collections.swap(List<?> list, int i, int j) // 交换List两个位置上的元素
- Collections.shuffle(List<?> list) // 随机打乱List中元素顺序
- Collections.reverse(List<?> list) // 反转List
- Collections.rotate(List<?> list, int distance) // 将List中所有元素向后移动distance个位置,末尾的元素循环到前面来
复制代码 Map接口:用于存储键(key)值(value)对,根据键得到值,因此不允许键重复,但允许值重复。
键值对 Map.Entry<K, V> 中的方法
Java代码- // 返回与此项对应的键
- K getKey()
- // 返回与此项对应的值
- V getValue()
- // 用指定值替换旧值,返回旧值
- V setValue(V value)
- Map接口定义的方法
复制代码 Java代码- // 删除Map中所有映射关系
- void clear()
- // 如果Map中含有指定键的映射关系,返回 true
- boolean containsKey(Object key)
- // 如果Map中有一个或多个键对应指定值,返回 true
- boolean containsValue(Object value)
- // 返回指定键映射的值,如果没有这个键,返回 null
- V get(Object key)
- // 将指定值与指定键关联,如果Map以前有一个该键的映射关系,指定值替换旧值,返回旧值,否则返回null
- V put(K key, V value)
- // 删除这个映射关系,返回键映射的值,如果没有,返回null
- V remove(Object key)
- // 如果Map为空,返回 true
- boolean isEmpty()
- // 返回Map中映射关系的数目
- int size()
- // 将Map中键值对转换为Set视图
- Set<Map.Entry<K,V>> entrySet()
- // 将Map中键转换为Set视图
- Set<K> keySet()
- // 将Map中值转换为Collection视图
- Collection<V> values()
- Map实现类常用的有 HashMap、LinkedHashMap 和 TreeMap。
- HashMap:散列表实现,具有高效查询速度,键的对象必须重写hashCode()方法和equals()方法。
- LinkedHashMap:内部使用散列以加快查询速度,同时使用链表维护元素插入的次序。
- TreeMap:基于红黑树实现,维护元素存储顺序,需要实现Comparable接口。
- TreeMap 增加的方法
复制代码 Java代码- // 返回大于指定键的最小键的映射,如果没有,返回 null
- Map.Entry<K,V> higherEntry(K key)
- // 返回大于指定键的最小键,如果没有,返回 null
- K higherKey(K key)
- // 返回小于指定键的最大键的映射,如果没有,返回 null
- Map.Entry<K,V> lowerEntry(K key)
- // 返回小于指定键的最大键,如果没有,返回 null
- K lowerKey(K key)
- // 返回大于等于指定键的最小键的映射,如果没有,返回 null
- Map.Entry<K,V> ceilingEntry(K key)
- // 返回大于等于指定键的最小键,如果没有,返回 null
- K ceilingKey(K key)
- // 返回小于等于指定键的最大键的映射,如果没有,返回 null
- Map.Entry<K,V> floorEntry(K key)
- // 返回小于等于指定键的最大键,如果没有,返回 null
- K floorKey(K key)
- // 返回最小键的映射,如果Map为空,返回 null
- Map.Entry<K,V> firstEntry()
- // 返回第一个键(最小的键)
- K firstKey()
- // 返回最大键的映射,如果Map为空,返回 null
- Map.Entry<K,V> lastEntry()
- // 返回最后一个键(最大的键)
- K lastKey()
- // 删除并返回最小键的映射,如果Map为空,返回 null
- Map.Entry<K,V> pollFirstEntry()
- // 删除并返回最大键的映射,如果Map为空,返回 null
- Map.Entry<K,V> pollLastEntry()
复制代码 更多参看 JDK API 文档 |
|