Java集合框架(List、Set)

Java集合框架(List、Set)

Java集合概述:

前面存储对象,数组,弊端
Java 集合就像一种容器,可以把多个对象的引用放入容器中。
Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组
在这里插入图片描述Java 集合可分为 Set、List 和 Map 三种体系
Set:无序、不可重复的集合,set又是以map为底层实现
List:有序,可重复的集合,list接口是以数组为底层实现,是有序的
Map:具有映射关系的集合,key-value(键值对),map接口底层是hash函数,无续(不是随机)
在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都当成 Object 类型处理;从 Java5 增加了泛型以后,Java 集合可以记住容器中对象的数据类型

Java集合类

在这里插入图片描述在这里插入图片描述

Java集合框架图

在这里插入图片描述

Collection接口

Collection 接口是 List、Set 和 Queue 接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 集合:
在这里插入图片描述

使用Iterator接口遍历集合元素:

Iterator 接口主要用于遍历 Collection 集合中的元素,Iterator 对象也被称为迭代器。
Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection 集合元素的统一编程接口。
Iterator 仅用于遍历集合,Iterator 本身并不提供存放对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。
在这里插入图片描述

使用foreach循环遍历集合元素:

从Java 5 开始,JDK提供了 foreach 循环迭代访问 Collection
在这里插入图片描述

List

List 代表一个元素有序、且可重复的集合,集合中的每个元素都有其对应的顺序索引
List 允许使用重复元素,可以通过索引来访问指定位置的集合元素。
List 默认按元素的添加顺序设置元素的索引。
实例代码:

package SX0115_1;

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

import org.junit.Test;

public class TestList {
//ArrayList是List的主要实现类
//	void add(Object o):添加元素
//	void add(int index, Object ele):根据指定的索引值把元素添加到该位置
//	boolean addAll(int index, Collection eles):根据指定的索引值把集合添加到该位置
//	Object get(int index):根据索引值查询元素值
//	int indexOf(Object obj):返回当前集合中首次出现元素obj的位置,如果没有返回-1
//	int lastIndexOf(Object obj):返回当前集合中最后出现元素obj的位置,如果没有返回-1
//	Object remove(int index):根据索引值删除指定元素
//	Object set(int index, Object ele):设置指定索引位置的元素值为ele
	//List常用方法:
	//增、删、改、查

	
	public void test() {
		List list=new ArrayList();
		//添加元素
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add(123);
		System.out.println(list);
		
		//查询
		System.out.println(list.get(1));
		//删除
		System.out.println(list.remove(1));
		System.out.println(list.get(1));
		//修改
		list.set(0, 345);
		System.out.println(list.get(0));	
		
	}
	@Test
	public void test1() {
		List list=new ArrayList();
		//添加元素
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add(123);
		//for循环
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		System.out.println("========");
		//foreach
		for (Object object : list) {
			System.out.println(object);
		}
		System.out.println("========");
		//迭代器
		Iterator i=list.iterator();
		while (i.hasNext()) {
			System.out.println(i.next());
		}
	}

}

ArrayList常用方法:
在这里插入图片描述LinkedList常用方法:
在这里插入图片描述

Set

Set接口存储一组唯一,无序的对象。
HashSet 是Set接口常用的实现类。
HashSet允许集合元素值为null
操作数据的方法与List类似,Set接口不存在get()方法。
Iterator接口表示对集合进行迭代的迭代器,专门实现集合的遍历。
方法:
hasNext():判断是否存在另一个可访问的元素
next():返回要访问的下一个元素

Set实现类之一:Hash Set()
HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。
HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。
HashSet 具有以下特点:
不能保证元素的排列顺序
HashSet 不是线程安全的
集合元素可以是 null
当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值决定该对象在 HashSet 中的存储位置。
HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。
实例代码:

package SX0115_1;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestSet {

	public static void main(String[] args) {
		/**
		 * set:存储的元素是无序的,不可重复,主要的实现类HashSet()
		 * 1.无序:不是随机性,指的是元素在底层存储的时候是无序
		 * 2.不可重复:在set添加相同元素时,后面的添加不进去,不是把前面的覆盖了
		 * 
		 * 
		 * 当向set存元素的时候,首先调用该类的hashCode()方法,计算该对象的哈希值,这个哈希值就代表该对象的位置
		 * 如果该对象之前没有对象存储,那么就把该对象存到该位置,如果此位置已经有了对象,调用equals方法,判断两个对象的值是否相等
		 * 如果相等,不能添加进来
		 */
		Set set=new HashSet();
		set.add(123);
		set.add("aaa");
		set.add("bbb");
		set.add(123);
		set.add(new Student("张三"));
		set.add(new Student("张三"));
		set.add(new String("李四"));
		set.add(new String("李四"));
		System.out.println(set);
		System.out.println(set.hashCode());
		
		//foreach
		for (Object object : set) {
			System.out.println(object);
		}
		
		//迭代
		Iterator i=set.iterator();
		while (i.hasNext()) {
			System.out.println(i.next());
			
		}

	}

}
class Student{
	String name;

	public Student(String name) {
		super();
		this.name = name;
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值