免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3080 | 回复: 0
打印 上一主题 下一主题

Java 数组与容器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-30 15:18 |只看该作者 |倒序浏览
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代码
  1. System.arraycopy()        // 从一个数组复制到另一个数组
  2. Arrays.asList()        // 数组转换为List
  3. Arrays.fill()        // 用某个值填充数组,可以指定位置进行填充
  4. Arrays.sort()        // 对数组排序,可以设定比较器
  5. Arrays.binarySearch()        // 如果能找到返回 >= 0 的值,否则 < 0 的值
  6. Arrays.equals()        // 比较两个数组是否相等
  7. Arrays.copyOf()        // 原数组复制到一个新数组,返回新数组
复制代码
容器中的元素都是对象的引用。

Collection 保存单个元素,而 Map 保存相关联的键值对。
List 和 Set 都继承自 Collection 接口。

List接口:元素有顺序,元素可以有重复。

Java代码
  1. // 在List末尾添加一个元素
  2. boolean add(E e)

  3. // 在指定的位置添加元素
  4. void add(int index, E element)

  5. // 删除指定位置的元素,返回删除的那个元素
  6. E remove(int index)

  7. // 删除第一次出现在List中的元素,如果有,返回true
  8. boolean remove(Object o)

  9. // 删除List中所有元素
  10. void clear()

  11. // 返回List中指定位置的元素
  12. E get(int index)

  13. // 用新元素替换指定位置的元素,返回被替换的元素
  14. E set(int index, E element)

  15. // 返回List中第一次出现指定元素的位置,否则返回 -1
  16. int indexOf(Object o)

  17. // 返回List中最后第一次出现指定元素的位置,否则返回 -1
  18. int lastIndexOf(Object o)

  19. // 如果List中包含这个元素,返回true
  20. boolean contains(Object o)

  21. // 如果List为空,返回true
  22. boolean isEmpty()

  23. // 返回List中元素的个数
  24. int size()

  25. // List转换为数组
  26. Object[] toArray()
复制代码
List实现类常用的有 ArrayList 和 LinkedList。
ArrayList:可以将它理解成一个可增长的动态数组,随机访问速度快。
LinkedList:链表实现的,在任何地方插删很方便。
LinkedList 增加的方法

Java代码
  1. // 在开头添加元素
  2. void addFirst(E e)

  3. // 在末尾添加元素
  4. void addLast(E e)

  5. // 返回第一个元素
  6. E getFirst()

  7. // 返回最后一个元素
  8. E getLast()

  9. // 删除并返回第一个元素
  10. E removeFirst()

  11. // 删除并返回最后一个元素
  12. E removeLast()
复制代码
Set接口:每个元素都是唯一的,不保存重复的元素,因此加入Set的Object必须定义equals()方法以确保对象的唯一性。

Java代码
  1. // 如果新添加元素已经存在了,返回false
  2. boolean add(E e)

  3. // 删除Set中所有元素
  4. void clear()

  5. // 如果Set中包含指定元素,返回true
  6. boolean contains(Object o)

  7. // 如果Set为空,返回true
  8. boolean isEmpty()

  9. // 删除指定元素,如果有,返回true
  10. boolean remove(Object o)

  11. // 返回Set中的元素个数
  12. int size()

  13. // Set转换为数组
  14. Object[] toArray()
复制代码
Set实现类常用的有 HashSet、LinkedHashSet 和 TreeSet。
HashSet:散列表实现,具有高效查询速度,需要实现hashCode()方法。
LinkedHashSet:内部使用散列以加快查询速度,同时使用链表维护元素插入的次序,在使用迭代器遍历Set时,结果会按元素插入的次序显示。
TreeSet:基于红黑树实现,维护元素存储顺序,需要实现Comparable接口。
TreeSet 增加的方法

Java代码
  1. // 返回大于指定元素的最小元素,否则返回 null
  2. E higher(E e)

  3. // 返回小于指定元素的最大元素,否则返回 null
  4. E lower(E e)

  5. // 返回大于等于指定元素的最小元素,否则返回 null
  6. E ceiling(E e)

  7. // 返回小于等于指定元素的最大元素,否则返回 null
  8. E floor(E e)

  9. // 返回第一个元素(最小的元素)
  10. E first()

  11. // 返回最后一个元素(最大的元素)
  12. E last()

  13. // 删除并返回第一个元素(最小的),如果Set为空,返回null
  14. E pollFirst()

  15. // 删除并返回最后一个元素(最大的),如果Set为空,返回null
  16. E pollLast()
复制代码
java.util.Collections

Java代码
  1. Collections.max(Collection c)        // 返回容器最大的元素
  2. Collections.min(Collection c)        // 返回容器最小的元素
  3. Collections.disjoint(Collection<?> c1, Collection<?> c2)        // 如果两集合没有相同元素,返回 true
  4. Collections.frequency(Collection<?> c, Object o)        // 返回集合中指定元素的个数

  5. Collections.sort(List<T> list)        // 对List进行排序,还可以设定Comparator
  6. Collections.binarySearch(List list, T key)        // 如果能找到返回 >= 0 的值,否则 < 0 的值
  7. Collections.fill(List<? super T> list, T obj)        // 用指定元素填充List所有元素
  8. Collections.swap(List<?> list, int i, int j)        // 交换List两个位置上的元素
  9. Collections.shuffle(List<?> list)        // 随机打乱List中元素顺序
  10. Collections.reverse(List<?> list)        // 反转List
  11. Collections.rotate(List<?> list, int distance)        // 将List中所有元素向后移动distance个位置,末尾的元素循环到前面来
复制代码
Map接口:用于存储键(key)值(value)对,根据键得到值,因此不允许键重复,但允许值重复。
键值对 Map.Entry<K, V> 中的方法

Java代码
  1. // 返回与此项对应的键
  2. K getKey()

  3. // 返回与此项对应的值
  4. V getValue()

  5. // 用指定值替换旧值,返回旧值
  6. V setValue(V value)
  7. Map接口定义的方法
复制代码
Java代码
  1. // 删除Map中所有映射关系
  2. void clear()

  3. // 如果Map中含有指定键的映射关系,返回 true
  4. boolean containsKey(Object key)

  5. // 如果Map中有一个或多个键对应指定值,返回 true
  6. boolean containsValue(Object value)

  7. // 返回指定键映射的值,如果没有这个键,返回 null
  8. V get(Object key)

  9. // 将指定值与指定键关联,如果Map以前有一个该键的映射关系,指定值替换旧值,返回旧值,否则返回null
  10. V put(K key, V value)

  11. // 删除这个映射关系,返回键映射的值,如果没有,返回null
  12. V remove(Object key)

  13. // 如果Map为空,返回 true
  14. boolean isEmpty()

  15. // 返回Map中映射关系的数目
  16. int size()

  17. // 将Map中键值对转换为Set视图
  18. Set<Map.Entry<K,V>> entrySet()

  19. // 将Map中键转换为Set视图
  20. Set<K> keySet()

  21. // 将Map中值转换为Collection视图
  22. Collection<V> values()
  23. Map实现类常用的有 HashMap、LinkedHashMap 和 TreeMap。
  24. HashMap:散列表实现,具有高效查询速度,键的对象必须重写hashCode()方法和equals()方法。
  25. LinkedHashMap:内部使用散列以加快查询速度,同时使用链表维护元素插入的次序。
  26. TreeMap:基于红黑树实现,维护元素存储顺序,需要实现Comparable接口。
  27. TreeMap 增加的方法
复制代码
Java代码
  1. // 返回大于指定键的最小键的映射,如果没有,返回 null
  2. Map.Entry<K,V> higherEntry(K key)

  3. // 返回大于指定键的最小键,如果没有,返回 null
  4. K higherKey(K key)

  5. // 返回小于指定键的最大键的映射,如果没有,返回 null
  6. Map.Entry<K,V> lowerEntry(K key)

  7. // 返回小于指定键的最大键,如果没有,返回 null
  8. K lowerKey(K key)

  9. // 返回大于等于指定键的最小键的映射,如果没有,返回 null
  10. Map.Entry<K,V> ceilingEntry(K key)

  11. // 返回大于等于指定键的最小键,如果没有,返回 null
  12. K ceilingKey(K key)

  13. // 返回小于等于指定键的最大键的映射,如果没有,返回 null
  14. Map.Entry<K,V> floorEntry(K key)

  15. // 返回小于等于指定键的最大键,如果没有,返回 null
  16. K floorKey(K key)

  17. // 返回最小键的映射,如果Map为空,返回 null
  18. Map.Entry<K,V> firstEntry()

  19. // 返回第一个键(最小的键)
  20. K firstKey()

  21. // 返回最大键的映射,如果Map为空,返回 null
  22. Map.Entry<K,V> lastEntry()

  23. // 返回最后一个键(最大的键)
  24. K lastKey()

  25. // 删除并返回最小键的映射,如果Map为空,返回 null
  26. Map.Entry<K,V> pollFirstEntry()

  27. // 删除并返回最大键的映射,如果Map为空,返回 null
  28. Map.Entry<K,V> pollLastEntry()
复制代码
更多参看 JDK API 文档
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP