Java集合(七)

7.1Java集合概述

1.Java集合就像一种容器,可以把多个对象的引用放入容器中。

2.Java集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。

3.Java集合可分为Set、List和Map三种体系

---Set:无序、不可重复的集合

---List:有序、可重复的集合

---Map:具有映射关系的集合

4.在Java5之前,Java集合会丢失容器中所有对象的数据类型,把所有对象都当成Object类型处理;从Java5增加了泛型之后,Java集合可以记住容器中对象的数据类型。

7.2Collection接口

Collection接口是List、Set和Queue接口的父接口,该接口里定义的方法即可用于操作Set集合,也可用于操作List和Queue集合:

7.3Iterator接口

1.使用Iterator接口遍历集合元素

1)Iterator接口主要用于遍历Collection集合中的元素,Iterator对象也被称为迭代器。

2)Iterator接口隐藏了各种Collection实现类的底层细节,向应用程序提供了遍历Collection集合元素的统一编程接口。

3)Iterator仅用于遍历集合,Iterator本身并不提供承装对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合。

2.使用foreach循环遍历集合元素

Java 5 提供了 foreach 循环迭代访问 Collection

7.4Set(HashSet,LinkedHashSet,TreeSet)

1.Set集合

1)Set集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set集合中,则添加操作失败。

2)Set判断两个对象是否相同不是使用==运算符,而是根据equals方法

2.HashSet 

1)HashSet 是Set接口的典型实现,大多数时候使用Set集合时都使用这个实现类。

2)HashSet 按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。

3)HashSet 具有以下特点:

---不能保证元素的排列顺序

---HashSet 不是线程安全的

---集合元素可以是null

4)当向HashSet 集合中存入一个元素时,HashSet 会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet 中的存储位置。

5)如果两个元素的equals()方法返回true,但它们的hashCode()返回值不相等,HashSet 会把它们存储在不同的位置,但依然可以添加成功。

3.hashCode()方法

1)HashSet 集合判断两个元素相等的标准:两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等。

2)如果两个对象通过equals()方法返回true,这两个对象的hashCode值也应该相同。

3)重写hashCode()方法的基本原则

---在程序运行时,同一个对象多次调用hashCode()方法应该返回相同的值

---当两个对象的equals()方法比较返回true时,这两个对象的hashCode()方法的返回值也应相等

---对象中用作equals()方法比较的Field,都应该用来计算hashCode值

4.LinkedHashSet

1)LinkedHashSet 是HashSet的子类。

2)LinkedHashSet 集合根据元素的hashCode值来决定元素的存储位置,但它同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。

3)LinkedHashSet 性能插入性能略低于HashSet,但在迭代访问Set里的全部元素时有很好的性能。

 4)LinkedHashSet 不允许集合元素重复。

5.TreeSet

1)TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态

  • Comparator comparator()
  • Object first()
  • Object last()
  • Object lower(Object e)
  • Object higher(Object e)
  • SortedSet subSet(fromElement, toElement)
  • SortedSet headSet(toElement)
  • SortedSet tailSet(fromElement)

2)TreeSet支持两种排序排序方法:自然排序和定制排序。默认情况下,TreeSet采用自然排序。

6.自然排序

1)排序:TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按升序排列。

2)如果试图把一个对象添加到TreeSet时,则该对象的类必须实现Comparable 接口。

3)实现Comparable 的类必须实现compareTo(Object obj)方法,两个对象即通过compareTo(Object obj)方法的返回值来比较大小。

4)Comparable 的典型实现:

---BigDecimal、BigInteger以及所有的数值型对应的包装类:按它们对应的数值大小进行比较。

---Character:按字符的UNICODE值来进行比较。

---Boolean:true对应的包装类实例大于false对应的包装类实例

---String:按字符串中字符的UNICODE值进行比较

---Date、Time:后面的时间、日期比前面的时间、日期大

5)因为只有相同类的两个实例才会比较大小,所以向TreeSet 中添加的应该是同一个类的对象

6)当需要把一个对象放入TreeSet 中,重写该对象对应的equals()方法时,应保证该方法与compareTo(Object obj) 方法有一致的结果:如果两个对象通过equals()方法比较返回true,则通过compareTo(Object obj) 方法比较应返回0

7.定制排序

如果需要实现定制排序,则需要在创建TreeSet 集合对象时,提供一个Comparator 接口的实现类对象。由该Comparator 对象负责集合元素的排序逻辑。

7.5List

1.List

1)List代表一个元素有序、且可重复的集合,集合中的每个元素都有其对应的顺序索引

2)List允许使用重复元素,可以通过索引来访问指定位置的集合元素。

3)List默认按元素的添加顺序设置元素的索引。

4)List集合里添加了一些根据索引来操作集合元素的方法

  • void add(int index, Object ele)
  • boolean addAll(int index, Collection eles)
  • Object get(int index)
  • int indexOf(Object obj)
  • int lastIndexOf(Object obj)
  • Object remove(int index)
  • Object set(int index, Object ele)
  • List subList(int fromIndex, int toIndex)

2.ListIterator

List额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法:

  • boolean hasPrevious()
  • Object previous()
  • void add()

3.ArrayList 和 Vector

1)ArrayList 和 Vector是List接口的两个典型实现

2)区别:

  • 是一个古老的集合,通常建议使用ArrayList
  • ArrayList是线程不安全的,而Vector 是线程安全的
  • 即使为保证List集合线程安全,也不推荐使用Vector

3)Arrays.asList(…) 方法返回的List集合既不是ArrayList 实例,也不是Vector实例。

Arrays.asList(…)返回值是一个固定长度的List集合。

7.6Map

1.Map

1)Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的Key,另外一组用于保存Map里的Value.

2)Map中的key和value都可以是任何引用类型的数据

3)Map中的key不允许重复,即同一个Map对象的任何两个Key通过equals方法比较中返回false

4)Key 和 Value之间存在单向一对一关系,即通过指定的Key总能找到唯一的,确定的Value。

5)Map常用方法

2.HashMap & Hashtable

1)HashMap 和 Hashtable是Map接口的两个典型实现类

2)区别:

  • Hashtable是一个古老的Map实现类,不建议使用
  • Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的
  • Hashtable不允许使用null作为key和value,而 HashMap 可以

3)与HashSet集合不能保证元素的顺序一样,Hashtable 、HashMap也不能保证其中key-value对的顺序

4)Hashtable 、HashMap判断两个Key值相等的标准是:两个Key通过equals方法返回true,hashCode值也相等。

5)Hashtable 、HashMap判断两个Value相等的标准是:两个Value通过equals方法返回true

3.LinkedHashMap

1)LinkedHashMap是HashMap的子类

2)LinkedHashMap可以维护Map的迭代顺序:迭代顺序与Key-Value对的插入顺序一致。

4.Properties

1)Properties类是Hashtable 的子类,该对象用于处理属性文件。

2)由于属性文件里的key、value都是字符串类型,所以properties里的Key和Value都是字符串类型的。

5.TreeMap

1)TreeMap存储Key-Value对时,需要根据Key对Key-Value对进行排序。TreeMap可以保证所有的Key-Value对处于有序状态。

2)TreeMap的Key的排序:

---自然排序:TreeMap的所有的Key必须实现Comparable 接口,并且所有的Key应该是同一个类的对象,否则将会抛出ClasssCastException

7.7Collections 工具类

1.操作集合的工具类:Collections

1)Collections是一个操作Set、List和Map等集合的工具类

2)Collections中提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法。

3)排序操作:

---reverse(List):反转List中元素的顺序

---shuffle(List):对List集合元素进行随机排序

---sort(List):根据元素的自然顺序对指定List集合元素按升降排序

---sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序

---swap(List,int, int):将指定list集合中的i处元素和j处元素进行交换

2.查找、替换

1)Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素

2)Object max(Collection,Comparator):根据Comparator 指定的顺序,返回给定集合中的最大元素

3)Object min(Collection)

4)Object min(Collection,Comparator)

5)int frequency(Collection,Object):返回指定集合中指定元素的出现次数

6)boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List对象的所有旧值

3.同步控制

Collections 类中提供了多个synchronizedXxx()方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题

7.8Enumeration

Enumeration接口是Iterator迭代器的“古老版本”

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值