java基础部分学习:13、集合

大纲:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
集合只能存放引用数据类型。

1、为什么需要集合:

1、可以动态的保存任意多个类型的数据。
2、提供了一系列方便的操作对象的方法:add、remove、set、get等

2、介绍:

1、集合主要是两组:单列集合、双列集合
2、Collection接口:有两个重要子接口(List、Set),他们的实现子类都是单列集合。
3、Map接口的实现子类是双列集合,存放键值对。

ArrayList arraylist = new ArrayList();
arraylist.add("jack");
arraylist.add("tom");

HashMap hashmap = new HashMap();
hashmap.put("name1", "jack");
hashmap.put("name2", "tom");

3、Collection常用方法:因为list为接口,不能实例化,因此使用ArrayList演示:

Collection方法list接口和set接口都可以使用:

List list = new ArrayList();  // 向上转型
// 1、添加
// 1.1、添加单个元素
list.add("jack");   // 集合只可以存储引用数据类型,String是
list.add(10);  // 自动装箱 list.add(new Integer(10))
list.add(true);
System.out.println(list);  // [jack, 10, true]
// 1.2、添加多个元素
ArrayList list2 = new ArrayList();
list2.add("红楼梦");
list2.add("三国演义");
list.addAll(list2);   // 添加一个集合list2

// 2、删除:
// 2.1、删除一个元素
list.remove(10);   // 删除指定元素
list.remove(0);    // 索引删除
// 2.2、删除多个元素
list.removeAll(list2);

// 3、查找元素
// 3.1、查找单个元素是否存在
list.contains("jack");   // T
// 3.2、查找多个元素
list.containsAll(list2);

// 4、获取元素个数:size
list.size();

// 5、判断是否为空
list.inEmpty();

// 6、清空:clear
list.clear();

4、遍历集合元素方法:

4.1、Iterator(迭代器):自动生成迭代器快捷键itit
4.1.1、介绍:

1、Iterator主要用于遍历Collection集合中的元素。
2、所有实现了Collection接口的集合类都有一个Iterator方法。
3、inerator仅用于遍历集合,本身并不存放对象。

4.1.2、迭代器原理:

在这里插入图片描述

1、Iterator inerator = col.inerator(); 得到一个迭代器。
2、hasNext(); 判断是否还有下一个元素,如果没有返回false,结束while循环。
3、next(); 两个作用:①、向下遍历元素。②、将遍历过的元素返回。

public static void main(String[] args) {
	Collection col = new ArrayList();
	col.add(new Book("三国演义", "罗贯中", 10.1);  
	col.add(new Book("红楼梦", "曹雪芹", 6.1);
	col.add(new Book("西游记", "吴承恩", 13.1);
	col.add(new Book("水浒传", "施耐庵", 12.1);

	// 1、先得到col对应的迭代器
	Iterator inerator = col.inerator();
	// 2、使用while循环遍历
	while(iterator.hasNext()) {
		// 返回下一个元素,类型是Object
		Object next = inerator.next();
		System.out.println(next);
	}

	// 3、当退出while循环后,这是inerator迭代器指向最后一个元素,如果再次遍历会报错
	// iterator.next();  // NoSuchElementException错误
	// 4、如果希望再次遍历,重置迭代器
	iterator = col.inerator();
}
class Book {
	private String name;
	private String author;
	private double price;

	public Book(String name, String author, double price) {
		this.name = name;
		this.author = author;
		this.price = price;
	}
}
4.2、增强for循环遍历集合元素:快捷键 I
public static void main(String[] args) {
	Collection col = new ArrayList();
	col.add(new Book("三国演义", "罗贯中", 10.1);  
	col.add(new Book("红楼梦", "曹雪芹", 6.1);
	col.add(new Book("西游记", "吴承恩", 13.1);
	col.add(new Book("水浒传", "施耐庵", 12.1);

	// 增强for循环底层仍然是迭代器。
	for(Object book : col) {
		System.out.println(book);
	}

	// 增强for循环也可以用在数组中
	int[] nums = {1, 2, 3, 4, 5};
	for(int i : nums) {
		System.out.println(i);
	}	
}
4.3、普通for循环遍历集合:
	Collection col = new ArrayList();
	col.add(new Book("三国演义", "罗贯中", 10.1);  
	col.add(new Book("红楼梦", "曹雪芹", 6.1);
	col.add(new Book("西游记", "吴承恩", 13.1);
	col.add(new Book("水浒传", "施耐庵", 12.1);

	for(int i = 0; i < col.size(); i++) {
		System.out.println(col.get(i));
	}

5、List接口:

5.1、介绍:

1、List接口是Collection接口的子接口。
2、list集合中元素是有序的,且可以重复。
3、list集合元素支持索引。

	List list = new ArrayList();
	list.add(new Book("三国演义", "罗贯中", 10.1);  
	list.add(new Book("红楼梦", "曹雪芹", 6.1);
	list.add(new Book("西游记", "吴承恩", 13.1);
	list.add(new Book("水浒传", "施耐庵", 12.1);

	System.out.println(list.get(3));

在这里插入图片描述

5.2、list常用方法:

List接口才可以使用,set接口不可以使用

List list = new ArrayList();
list.add("张三");
list.add("李四");
// 1、在指定位置插入元素
list.add(1, "王五");
// 2、在指定位置插入集合:
List list2 = new ArrayList();
list2.add("jack");
list2.add("mary");
list.addAll(1, list2);
// 3、返回元素首次出现的索引
list.indexOf("mary");
// 4、返回元素在集合中末尾出现的位置
list.lastIndexOf("mary");
// 5、获取指定位置的元素
list.get(1);
// 6、删除指定位置的元素并返回次元素
list.remove(0);
// 7、设置指定位置的元素;类似替换
list.set(1, "老六");
// 8、返回[fromIndex, toIndex)位置的子集合
List returnList = list.subList(0, 2);  // [0,2)

ArrayList基本等同于Vector,但是线程不安全,在多线程时建议使用vector。

6、ArrayList底层结构和源码分析:

1、ArrayList中维护了一个Object类型的数组elementData。

2、当创建ArrayList对象时,如果使用的是ArrayList的无参构造,则初始elementData为0,第一次添加elementData扩容为10,再次添加,扩容为原来的1.5倍。

3、如果使用的是指定大小的构造器,那么初始elementData为指定大小,再次添加则扩容为原来的1.5倍。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值