JavaSE(十)--集合

1.集合

存多个引用数据类型的数据的集合.它的长度可变.(动态)

2.集合中常用概念:

  • 有序性:按照添加顺序来排列.

  • 可排序性:按照一定规则来排序(eg:数字由小到大,或由大到小来排序)

  • 唯一性:只有一个,不可重复.

  • 集合家族系谱图:
    在这里插入图片描述

3 List

3.1:Collection接口

存储无序,可重复的单一对象.

3.1.1 List接口

存储有序,可重复的单一对象.

  • ArrayList类:存储有序,可重复的单一对象.底层采用Object[]存值.
  • LinkedList类:存储有序,可重复的单一对象.底层采用双向链表结构存值.

3.1.2 Set接口

存储无序,唯一的单一对象.

  • HashSet类:存储无序,唯一的单一对象.底层采用HashMap的Key存值.
  • TreeSet类:存储无序,但是可排序,唯一的单一对象.底层采用TreeMap的Key存值.

3.2 Map接口

按照Key-value对存值.

  • HashMap:按照Key-value对存值,Key无序,唯一的.底层采用数组+链表结构存值.
  • TreeMap:按照Key-value对存值,Key无序可排序,唯一的.底层采用二叉树结构存值.

4.ArrayList

存储有序的,可重复的单一对象.底层采用Object[]存值.默认按照1.5倍扩容.

  • 优点:按顺序添加和修改及遍历的效率高.
  • 缺点:删除元素或按指定索引添加元素效率低.
public static void main(String[] args) {
		//创建集合对象
		List stuAges=new ArrayList();
		
		//向集合中添加元素
		stuAges.add(11);
		stuAges.add(99);
		stuAges.add(61);
		//向集合中指定索引位置添加元素时,索引范围:[0,集合.size()]
		stuAges.add(2, 33);
		stuAges.add(3, 71);
		stuAges.add(11);
		
		//遍历集合
		for (int i = 0; i < stuAges.size(); i++) {
			System.out.println(stuAges.get(i));
		}
		System.out.println("------------------------------");
		
		//修改集合中元素,修改元素索引范围为:[0,集合.size()-1]
		stuAges.set(2, 44);
		
		//遍历集合
		for (Object ob : stuAges) {
			System.out.println(ob);
		}
		System.out.println("________________________________");
		
		//删除集合中元素,删除的索引范围:[0,集合.size()-1]
		stuAges.remove(1);
		//删除集合中元素
		stuAges.remove((Object)11);
		//根据过滤器,删除满足条件元素
		stuAges.removeIf(new Predicate() {
			/**
			 * 过滤方法
			 */
			@Override
			public boolean test(Object t) {
				//将判断集合中每个元素转换字符串类型,再判断元素是否以1结尾
				if (t.toString().endsWith("1")) {
					return true;
				}
				return false;
			}
		});
		
		//遍历集合
		for (int i = 0; i < stuAges.size(); i++) {
			System.out.println(stuAges.get(i));
		}
		System.out.println("------------------------------");
		
		//清空集合
		stuAges.clear();
		//遍历集合
		for (Object ob : stuAges) {
			System.out.println(ob);
		}
		System.out.println("________________________________");
	}

5.过滤器(filter)

将需要数据留下,不需要的数据剔除掉.

6.LinkedList

存储有序的,可重复的单一对象.底层采用双向链表结构存值.

  • 优点:添加和删除元素效率高.
  • 缺点:遍历和修改元素效率低.
public static void main(String[] args) {
		//创建集合对象
		LinkedList stuAges=new LinkedList();
		
		//向集合中添加元素
		stuAges.add(11);
		stuAges.add(99);
		stuAges.add(61);
		//向集合中指定索引位置添加元素时,索引范围:[0,集合.size()]
		stuAges.add(2, 33);
		stuAges.add(11);
		//向集合中添加第一个元素
		stuAges.addFirst(22);
		//向集合中添加最后一个元素
		stuAges.addLast(55);
		
		//遍历集合
		for (int i = 0; i < stuAges.size(); i++) {
			System.out.println(stuAges.get(i));
		}
		System.out.println("------------------------------");
		
		//修改集合中元素,修改元素索引范围为:[0,集合.size()-1]
		stuAges.set(2, 44);
		
		//遍历集合
		for (Object ob : stuAges) {
			System.out.println(ob);
		}
		System.out.println("________________________________");
		
		
		//删除集合中第一个元素
		stuAges.removeFirst();
		
		//删除集合中最后一个元素
		stuAges.removeLast();
		
		//删除集合中元素,删除的索引范围:[0,集合.size()-1]
		stuAges.remove(1);
		//删除集合中元素
		stuAges.remove((Object)11);
		//根据过滤器,删除满足条件元素
		stuAges.removeIf(new Predicate() {
			/**
			 * 过滤方法
			 */
			@Override
			public boolean test(Object t) {
				//将判断集合中每个元素转换字符串类型,再判断元素是否以1结尾
				if (t.toString().endsWith("1")) {
					return true;
				}
				return false;
			}
		});
		
		//遍历集合
		for (int i = 0; i < stuAges.size(); i++) {
			System.out.println(stuAges.get(i));
		}
		System.out.println("------------------------------");
		
		//清空集合
		stuAges.clear();
		//遍历集合
		for (Object ob : stuAges) {
			System.out.println(ob);
		}
		System.out.println("________________________________");
	}

7.ArrayList VS Vector(面试)

相同点存储的都是有序的可重复单一对象,底层采用Object[]存值.

  • 1:推出时间不同:Vector在JDK1.2之前就推出了;而ArrayList在JDK1.2后才推出.
  • 2:线程安全性和效率不同:Vector是线程安全的集合,效率低;ArrayList是线程不安全的集合,效率高.
  • 3:扩容不同:Vector按原来2倍扩容;ArrayList按原来1.5倍扩容.
  • 4:方法不同:ArrayList拥有的所有方法Vector都有,Vector还有自己独有的方法.

8.迭代器(Iterator)

遍历访问collection集合中每个元素.

  • 集合名.iterator();获得当前集合跌代器对象.
  • 跌代器对象.hasNext();判断跌代器对象后面是否有元素可跌代.
  • 跌代器对象.next();跌代元素(访问当前元素),
    注意: 集合中每个元素只能调用一次next().
public static void main(String[] args) {
		//创建集合对象
		ArrayList stuAges=new ArrayList();
		
		//向集合中添加元素
		stuAges.add(11);
		stuAges.add(99);
		stuAges.add(61);
		
		//获得集合的迭代器对象
		Iterator it1=stuAges.iterator();
		
		//循环判断迭代器对象后面是否有元素可迭代
		while (it1.hasNext()) {
			//迭代出当前元素
			Object ob=it1.next();
			System.out.println(ob);
		}
	}
	public static void main(String[] args) {
		//创建集合对象
		ArrayList stus=new ArrayList();
		
		//向集合中添加元素
		stus.add(new Student("张三",88));
		stus.add(new Student("李四",38));
		stus.add(new Student("田七",48));
		
		//获得集合的迭代器对象
		Iterator it2=stus.iterator();
		//循环判断迭代器后面是否有元素可迭代
		while (i
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值