Java集合框架

一、数组存储多个数据方面的特点

1.数组一旦初始化其长度就是确定的,无法改变

2.数组中的多个元素是依次紧密排列的,有序的,可重复的

3.数组中存储数据的单一性:对于无序的、不可重复的场景的多个数据就无能为力了

4.数组中可用的方法和属性都极少;具体的需求都需要组织相关的代码逻辑

5.数组一旦初始化完成,其元素类型就是确定的,不是此类型的元素就不能添加到此数组中;

6.元素的类型既可以是基本数据类型也可以是引用数据类型

7.针对数组中元素的删除、插入操作性能较差

二、Java集合框架体系:

java.util.Collection:存储一个一个的数据
子接口:List存储有序的、可重复的数据(ArrayList、LinkedList、Vector),可以当做动态数组
子接口:Set存储无序的,不可重复的数据(HashSet、LinkedHashSet、TreeSet)
java.util.Map:存储一对一对的数据(key-value键值对)(HashMap、LinkedHashMap、TreeMap、Hashtable、Properties)

三、Collection接口及方法

1.add(E obj):添加元素对象到当前集合中
2.addAll(Collection other):添加other集合中的所有元素对象到当前集合中,即this=thisUother
3.int size():获取当前集合中实际存储的元素个数
4.boolean isEmpty():判断当前集合是否为空集合
5.boolean contains(Object obj):判断当前集合中是否存在一个与obj对象equals返回true的元素
6.boolean containsAll(collection coll):判断coll集合中的元素是否在当前集合中都存在,即coll集合是否是当前集合的“子集”;
7.boolean equals(Object obj):判断当前集合与obj是否相等;
8.void clear():清空集合元素;
9.boolean remove(Object obj):从当前集合中删除第一个找到的与obj对象equals返回true的元素;
10.boolean removeAll(Collection coll):从当前集合中删除所有与coll集合中相同的元素;
11.boolean retainAll(collection coll):从当前集合中删除两个集合中不同的元素,使得当前集合仅保留与coll集合中的元素相同的元素,即当前集合中仅保留两个集合的交集
12.Object[] toArray():返回包含当前集合中所有元素的数组
13.hashCode():获取集合对象的哈希值
14.iterator():返回迭代器对象,用于集合遍历

1.集合与数组之间的相互转换

集合转换为数组:
toArray();
数组转换为集合:
Array.asList(arr);

2.向Collection中添加元素的要求: 

要求元素所属的类一定重写equals()方法,因为Collection中的相关方法在使用时要调用equals()方法来进行判断;

3.集合元素的遍历

Iterator iterator = coll.iterator();
while(iterator.hasNext()){
    System.out.println(iterator.next());
    //next()指针下移,将指针下移后的对应位置元素返回
}

4.增强for循环(foreach循环)的使用

for(要遍历的集合或数组元素的类型 临时变量:要遍历的集合或数组变量){
    System.out.println(临时变量);
}

(1)针对于集合来说,增强for循环的底层依然是迭代器;

(2)增强for循环的执行过程中是将数组或集合中的元素依次赋给临时变量,循环体中对临时变量的修改可能不会导致原有集合或数组中元素的修改;

四、List接口常用的方法

第一波:Collection中声明的15个方法

第二波:

1.void add(int index,Object ele):在index位置插入ele元素;
2.boolean addAll(int index,Collection eles):从index位置开始将eles中的所有元素添加进来;
3.Object get(int index):获取指定index位置的元素;
4.List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合;
5.int indexOf(object obj):返回obj在集合中首次出现的位置;
6.int lastIndexOf(object obj):返回obj在当前集合中末次出现的位置;
7.Object remove(int index):移除指定index位置的元素,并返回此元素;
8.Object set(int index,Object ele):设置指定index位置的元素为ele;
遍历方式1:
Iterator iterator = list.iterator();
while(iterator.hasNext()){
    System.out.println(iterator.next());
}
遍历方式2:
for(Object obj:list){
    System.out.println(obj);
}
遍历方式3:
for(int i = 0; i < list.size(); i++){
    System.out.println(list.get(i));
}

List及其实现类的特点:

(1)ArrayList:List的主要实现类,线程不安全,效率高,底层使用Object[]数组存储,在添加、查找数据时效率较高,在插入、删除数据时效率较低;

(2)LinkedList:底层使用双向链表的方式进行存储,在添加、查找数据时效率较低,在插入、删除数据时效率较高;

(3)Vector:List的古老实现类,线程安全效率低,底层使用Object[]数组存储;

五、Set不同实现类的对比以及无序性、不可重复性

1.Set及其实现类的特点:

(1)HashSet:Set的主要实现类,底层使用的是HashMap,即使用数组+单向链表+红黑树的结构进行存储

(2)LinkedHashSet:是HashSet的子类,在现有的结构(数组+单向链表+红黑树)基础上又添加了一组双向链表,用于记录添加元素的先后顺序,可以按照添加元素的先后顺序进行遍历;便于频繁的查询操作

(3)TreeSet:底层使用红黑树存储,可以按照添加的元素指定的属性大小进行遍历

2.Set中的常用方法:即为Collection中声明的15个抽象方法,没有新增的方法

3.开发中的使用频率及场景:相较于Map和List使用频率较少;可以用来过滤重复的数据

4.无序性、不可重复性的理解:

(1)无序性:无序性不等于随机性,添加元素的顺序和遍历元素的顺序不一致并不代表无序性,所谓的无序性与添加的元素的位置有关,并不像ArrayList一样是依次紧密排列的

(2)不可重复性:添加到Set中的元素是不能相同的,比较的标准需要判断hashCode()得到的哈希值以及equals()方法得到的boolean类型的结果;哈希值相同且equals()方法返回true则认为元素是相同的;

5.添加到HashSet/LinkedHashSet中的元素要求:

要求元素所在的类重写hashCode()和equals()方法,同时要求equals()和hashCode()保持一致性,使用编译器自带的重写功能即可,能够保证一致性

6.TreeSet中添加元素的要求:

(1)要求添加到TreeSet中的元素必须是同一个类型的元素,否则会报ClassCastException异常

(2)添加的元素需要考虑排序:自然排序(元素的类实现comparator接口)或定制排序(创建TreeSet时传入实现compare()方法的comparable接口)

(3)TreeSet中判断数据是否相同的标准不再是hashCode()和equals()方法,也就意味着添加到TreeSet的元素所在的类不需要重写这两个方法了;比较元素的大小或比较元素是否相等的标准就是考虑自然排序或定制排序中compareTo()或compare()方法的返回值;如果这两个方法的返回值为0,则表明这两个元素相等,无法添加到此TreeSet中;

六、Map不同实现类的对比与HashMap中元素的特点

1.Map实现类及其对比:

(1)HashMap:主要实现类,线程不安全,效率高,可以添加null的key和value,底层使用数组+单向链表+红黑树的结构存储

(2)LinkedHashMap:HashMap的子类,在HashMap的数据结构的基础上增加了一对双向链表,用于记录元素的添加先后顺序,可以在遍历的时候按照添加的顺序显示,对于频繁的遍历操作建议使用该类

(3)TreeMap:底层使用红黑树存储;可以按照添加的key-value对中的key元素中的指定属性的大小进行遍历,需要考虑使用自然排序或定制排序;向TreeMap中添加的key必须是同一个类型的对象

(4)Hashtable:古老实现类,线程安全,效率低,不可以添加null的key和value,底层使用数组+单向链表的结构存储

(5)Properties:Hashtable的子类,其key,value都是String类型,常用来处理属性文件

2.HashMap中的元素特点:

(1)Map中的key用Set来存放,不允许重复,同一个Map对象对应的类需要重写hashCode()和equals()方法;

(2)key和value之间存在单向一对一关系,即通过指定的key总能找到唯一确定的value,不同key对应的value可以重复,value所在的类需要重写equals()方法

(3)key和value构成一个entry,所有的entry彼此之间是无序的、不可重复的,所有的entry构成了一个Set集合;

3.Map中常用的方法:

1.Object put(Object key, Object value):将指定key-value添加到(或修改)当前map对象中;
2.void putAll(Map m):将m中的所有key-value对存放到当前map中;
3.Object remove(Object key):移除指定key的key-value对,并返回value;
4.void clear():清空当前map中的所有数据;
5.Object get(Object key):获取指定key对应的value;
6.boolean containsKey(Object key):是否包含指定的key;
7.boolean containsValue(Object value):是否包含指定的value;
8.int size():返回map中key-value对的个数;
9.boolean isEmpty():判断当前map是否为空;
10.boolean equals(Object obj):判断当前map和参数对象obj是否相等;
11.Set keySet():返回所有key构成的Set集合;
12.Collection values():返回所有value构成的Collection集合;
13.Set entrySet():返回所有key-value对构成的Set集合;

4.TreeMap的使用:向TreeMap中添加的key必须是同一个类型的对象

5.Properties的使用:

(1)数据和代码耦合程度高,如果修改的话需要重写编译代码、打包发布,较为繁琐

(2)将数据封装到具体的配置文件中,在程序中读取配置文件中的信息,实现了数据和代码的解耦

File file = new File("文件路径");
FileInputStream fis = new FileInputStream(file);
Properties pro = new Properties();
pro.load(fis);
String name = pro.getProperty("键名");

七、Collections工具类的使用

1.Collections概述:

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

2.常用方法:

Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法(均为static方法)

1.reverse(List list):反转List中元素的顺序;
2.shuffle(List list):对List集合元素进行随机排序;
3.sort(List list):根据元素的自然顺序对指定List集合元素按升序排序;
4.sort(List list,Comparator c):根据指定的Comparator产生的顺序对List集合元素进行排序;
5.swap(List list,int i,int j):将指定list集合中的i处元素和i处元素进行交换;
6.object max(Collection coll):根据元素的自然顺序返回给定集合中的最大元素;
7.Object max(Collection coll,Comparator c):根据Comparator指定的顺序返回给定集合中的最大元素;
8.Object min(Collection coll):根据元素的自然顺序返回给定集合中的最小元素;
9.Object min(Collection coll,Comparator c):根据Comparator指定的顺序返回给定集合中的最小元素;
10.int binarySearch(List list,T key)在List集合中查找某个元素的下标;
List的元素必须是T或的子类对象,而且必须是可比较大小的,即支持自然排序的;
而且集合也事先必须是有序的,否则结果不确定;
11.int binarySearch(List list,T key,Comparator c)在List集合中查找某个元素的下标;
List的元素必须是T或的子类对象,而且必须是可比较大小的,即支持自然排序的;
而且集合也事先必须是按照c比较器规则进行排序过的,否则结果不确定;
12.int frequency(Collection c,Object o):返回指定集合中指定元素出现的次数;
13.void copy(List dest,List src):将src中的内容复制到dest中;
14.boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List对象的所有旧值;
15.提供了多个unmodifiableXxx方法,该方法返回指定Xxx的不可修改的视图;
16.boolean addAll(Collection c,T...elements)将所有指定元素添加到指定Collection中;
17.Collections类中提供了多个synchronizedXxx() 方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值