Java集合(上)

目录

 

阐述

数组和集合的区别是什么

数组、字符串、集合的长度分别如何获取?

什么是并发修改异常?怎么产生的?如何解决?

数组和(单列)集合之间如何相互转换?需要注意什么问题?

为什么出现集合类?集合体系结构是什么样的?

课后作业


阐述

数组和集合的区别是什么

两点区别:

长度——数组的长度是固定的;集合的长度可变。

存储元素的数据类型——数组即可以存基本类型,也可以存引用类型;集合只能存引用类型的数据。

数组、字符串、集合的长度分别如何获取?

数组.length

字符串.length()

集合.size()

什么是并发修改异常?怎么产生的?如何解决?

并发修改异常ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,就出现异常。

这个异常的根源在于迭代器。集合调用iterator方法创建迭代器时,会把自己的计数器传给迭代器作为初始值。计数器记录的是集合被修改的次数。每次调用迭代器的方法时,迭代器都会检测自己的计数器和相应集合的计数器是否一样,如果不一样就会报错。

不调用迭代器是不会有并发修改异常的。用迭代器遍历集合的时候,通过迭代器修改集合可避免并发修改异常。

数组和(单列)集合之间如何相互转换?需要注意什么问题?

集合转数组:集合.toArray()

数组转集合:Arrays.asList(数组)

需要注意的问题:

数组直接转成的集合是不可变集合,不能进行增加或删除操作,但可以进行修改操作。如果想转成真正的可变集合,就创建一个新的集合,参数就是Arrays.asList(数组)返回的不可变集合。

数组转集合——如果是引用类型的数组转集合,是直接转(数组中的元素即集合中的元素);如果是基本类型的数组转集合,是把整个数组当作集合的一个元素来转的。

为什么出现集合类?集合体系结构是什么样的?

为了方便对多个对象进行操作,就出现了可变的容器来存储多个对象,这个可变的容器就是集合。

集合分双列集合和单列集合。

单列的顶级父接口是Collection,由List接口和Set接口继承。

实现List接口的集合类,里面的元素是可重复的,取出元素的顺序和存储元素的顺序是一致的,常用的集合类有ArrayList和LinkedList。

实现Set接口的集合类,里面的元素是不重复的,取出元素的顺序和存储元素的顺序不一致,常用的集合类有HashSet。

双列的顶级接口是Map,实现该接口的类有HashMap。

 

课后作业

使用List集合存储对象并行遍历,遍历集合的时候,在控制台输出元素值。要求使用三种方式进行遍历(迭代器、普通for、增强for)。
 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

//操作步骤:
//1.	创建集合对象。
//2.	把元素添加到集合。
//3.	遍历集合。
public class ListIterator {
	public static void main(String[] args) {
		List<String> strList = new ArrayList<>();
		strList.add("happy");
		strList.add("new");
		strList.add("year");
		
		System.out.println("迭代器----------------------------------------");
		Iterator<String> strIterator = strList.iterator();		
		while (strIterator.hasNext()) {
			System.out.println(strIterator.next());			
		}
		
		System.out.println("普通for---------------------------------------");
		for(int i=0; i<strList.size(); i++) {
			System.out.println(strList.get(i));
		}
		
		System.out.println("增强for---------------------------------------");
		for(String element : strList) {
			System.out.println(element);
		}
	}

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值