黑马程序员-集合概念与工具类Collections

本文探讨了数组和集合在Java中的不同之处,包括它们的数据类型、长度特性及如何处理基本数据类型。此外,还介绍了集合类的特点及其子接口List和Set的不同,并解释了Collection和Collections的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

 

数组和集合类同是容器,有何不同?

数组中可以存储基本数据类型,也可以存储对象

集合只能存储对象

数组长度是固定的

集合长度是可变的

 

有个疑问:

java中,所有元素都是对象,对于基本数据类型,实际上也是一个对象,因为java对基本数据类型有自动装箱和拆箱的功能,所以,数组和集合的区别应该在存储的内容上没有区别才对?是否可以说,集合也可以存储基本数据类型?

解答:JDK1.5之后,集合中可以添加基本数据类型,就是自动装箱拆箱的缘故.所以如果要往集合里装基本数据类型的时候,特别是涉及到泛型的写法

这样的泛型写法是错误的:

TreeMap<char,int>treemap = new TreeMap<char,int>();

应该这样写

TreeMap<character,Integer>treemap=newTreeMap

< character,Integer >();

集合类的特点

集合只用于存储对象(不能存储基本数据类型),集合长度是可变的,集合可以存储不同类型的对象。

Collection接口有两个子接口:

List:可存放重复元素,元素存取是有序的。(有序可重复)

Set:不可以存放重复元素,元素存取是无序的(无序不可重复)

迭代取出方法Iterator()Collection里面的方法,所有,Collection的子类都具有Iterator()

 

一道面试题:collectioncollections有什么区别?

Collection是一个接口,也可以说是一个框架

Collections专门用于对集合进行操作的工具类,

 

几个主要的功能方法:

排序:

public static <T extends Comparable<?super T>> void sort(List<T> list):根据元素的自然顺序对指定列表按升序进行排序

 

public static <T> voidsort(List<T> list,Comparator<? super T> c):根据指定比较器产生的顺序对指定列表进行排序

翻转:

static voidreverse(List<?> list):反转指定列表中元素的顺序

Ps:注意,该方法是没有返回值类型的,是直接修改了元素在集合中的位置

 

publicstatic <T> Comparator<T> reverseOrder():返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序

 

publicstatic <T> Comparator<T> reverseOrder (Comparator<T> cmp):返回一个比较器,它强行逆转指定比较器的顺序。如果指定比较器为 null,则此方法等同于 reverseOrder()

Ps:注意,该方法是传入一个比较器对象,然后返回一个比较器对象,改变了传入比较器内部的比较方式

加锁:

重点介绍一下加锁方法

synchronizedList(List<T> list)

synchronizedMap(Map<K,V> m)

synchronizedSet(Set<T> s)

传入未加锁的集合,返回一个加锁的集合

 

将数组转变成集合,不能使用集合的增删方法,因为数组的长度是固定的,如果使用了增删操作,那么会抛异常

例:

List list = Array.asList(arr);

List.add(“01”);

这个编译会不通过

一个注意的地方:

如果数组中的元素都是对象,那么转成集合时,数组中的元素就会直接转成集合中的元素

如果数组中的元素都是基本数据类型,那么会将数组名作为集合中的元素存在

int[] arr={4,3,4,2,5,6}

错误的写法List<Integer>Arrays.asList(arr);

正确的写法:List<int[]>Arrays.asList(arr);

 

对于Integer[] arr={4,3,4,2,5,6};

正确的写法List<Integer>Arrays.asList(arr);

错误的写法:正确的写法:List< Integer []>Arrays.asList(arr);

为什么要把集合转成数组?

为了限制对元素的操作,因为数组的长度是固定的,限制增删操作

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.youkuaiyun.com 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值