Java基础 - Collection 集合

Java基础 - Collection 集合

java.util.Collection 接口(集合框架)
Collection -> (所有集合的顶级接口)
集合 -> 用来保存一组元素的,不同的实现类实现了不同的数据结构
集合和数组一样,保存一组元素,但是操作元素的方法集合已经提供了!

常用的子接口:

  • java.util.List -> 线性表(可以存放重复元素,并且有序)
  • java.util.Set -> 不可以重复的集合,大部分实现类是无序,是否重复元素是根据自身equals比较的结果判定的

Collection基本操作:

	// Collection集合不需要和数组一样添加新元素后需要扩容
	// 输出集合与元素的toString()方法有直接关系(按照toString()方法返回值输出)
	// 集合中不可以存放基本类型元素(存放会执行Java的自动装箱特性)
	// 集合存放元素的引用

	Collection c = new ArrayList();	// -> List
	Collection c = new HashSet();	// -> Set
	c.add( E e );		// 向集合中添加元素。 		-> 返回boolean
	c.size();			// 集合的大小。				-> 返回集合大小
	c.isEmpty();		// 判断集合是否为空集。	-> 返回boolean
	c.clear();			// 清空集合。

	c.contains(E e);	// 判断集合中是否包含e(元素)		->返回boolean
						// 判断依据 -> 根据给定元素与集合每一个元素进行equals比较,
						//			  为true的,就认为包含,所以元素的equals()方法
						//			  直接影响contains的判断结果
							
	c.remove(E e);		// 删除元素
						// 删除依据 -> 与元素的equals()方法有直接关系
						// 			  List集合中存在多个相同元素时,
						//			  只会删除前一个元素;Set集合不存在此问题

集合之间的操作:

	Collection c1 = new ArrayList();		c1.add(E e);
	Collection c2 = new ArrayList();		c2.add(E e);

	c1.addAll(c2);			// 添加所有元素(将c2中的所有元素放到c1集合中)
							//	List可以存在重复元素;Set无重复元素
	c1.containsAll(c2);		// 判断是否全部包含c2元素			->返回boolean

	c1.removeAll(c2);		// 会删除当前集合中与给定集合的共有元素(交集)

遍历:

	// 遍历集合
	// 集合提供了统一的遍历操作
	// 无论哪种数据结构实现的集合都提供了迭代器模式遍历(Iterator)方式
	// Iterator -> 提供的iterator方法可以获取一个用于遍历当前集合的迭代器
	// java.util.Iterator接口(迭代器接口),规定了遍历集合的相关操作,所有集合都有
	// 	一个用于遍历自身的迭代器实现类,我们无需关注它们的类名,以多态的角度用
	//		该接口看待并调用相关遍历方法即可。
	// 迭代器遍历集合的统一方式:	问->取->删(不是必须操作)
	// 迭代器中不允许使用集合的方法增加和删除元素操作(否则会抛出异常)
	Collection c = new ArrayList();
	c.add(E e);
	Iterator it = c.iterator();
	while(it.hasNext()){				// 问 -> it.hasNext()通过迭代器查看是否还有元素可以遍历
	
		String str = (String)it.next();	// 取 -> it.next()通过迭代器遍历下一个元素
		System.out.print(str);
		
		it.remove();					// 删除集合中的元素(不允许使用集合的方法删除删除元素)
	}
	
	
	// JDK5之后 -> for循环(增强型)新循环
	// 是编译器认可,而不是虚拟机,编译器在编译源码时会将新循环遍历改为for循环遍历
	String[] array = {"xxx","xxx",...};
	for(String str : array){
		System.out.println(str);
	}
	Collection c = new ArrayList();
	c.add(E e);
	使用新循环遍历集合会被编译器编译时改为使用迭代器遍历,
	因此要遵循迭代器使用规范,遍历过程中不能通过集合的方法增删元素
	for(Object o : c){
		String str = (String)o;
		System.out.println(str);
	}

泛型:

	// JDK5之后 -> 泛型(参数化类型)
	// 允许我们在使用一个类时指定它的属性,方法参数和返回值类型(使用更灵活)
	// 原型 -> Object(不指定时就使用它)
	// 在集合中 -> 规定集合中元素类型
	Collection<String> c = new ArrayList<String>();	// 只能存放String类型

List线性表:

	// java.util.List(线性表)
	// List集合可以存在重复集合,并且有序
	// 可以通过下标操作元素
	// 常用实现类:
	// 	java.util.ArrayList			-> 数组实现,查询性能好,增删元素差
	//	java.util.LinkedList		-> 链表实现,增删元素性能好(首尾最佳),查询差
		
	List<E> list = new ArrayList<>();	// JDK7之后,右侧<>可以不用写泛型类型

	list.add(E e);						// 添加元素。

	list.get(int index);				// 获取给定下标处对应的元素。
	for(int i=0;i<list.size();i++){		// 遍历list集合内的元素
		list.get(i);
	}

	list.set(int index,E e);	// 在index位置上替换元素为e。 ->返回替换之前元素

	list.add(int index,E e);	// 在index位置插入元素e。

	list.remove(int index);		// 删除index位置上的元素		->返回删除的元素

	list.subList(int index1,int index2);	// 截取index1到index2之间的元素
											// ->返回截取元素集合

集合 <=> 数组

	// 集合 => 数组
	// Collection中定义了一个方法toArray
	Collection<String> c = new ArrayList<>();
	c.add("xxx");
	Object[] array = c.toArray();						// JDK5之前只能这样转
	String[] array = c.toArray(new String[c.size()]);	// JDK5之后可以直接转为String
	System.out.println(Arrays.toString(array));
	
	// 数组 => 集合
	// 数组的工具类Arrays提供了一个静态方法asList(可以将给定的数组转换为List结合)
	// 对转换来的集合元素操作(增删)就是对原数组对应元素的操作(只能通过重新new集合才可以)
	// 不可以改变集合中元素个数(因为数组是定长的)
	String[] array = {"xxx","xxx",...};
	List<String> list = Arrays.asList(array);			// 将数组转换为集合
	List<String> list2 = new ArrayList<>(Arrays.asList(array));
	list2.add("five");

集合排序:

	// 自然排序(小 - 大)
	List<Integer> list = new ArrayList<>();
	list.add(1);...
	Collection.sort(list);
	// 自定义排序(需要提供比较器)要重写方法
	// 按照某个属性排序
	// 新建比较器(返回0 -> 相等;返回1 -> 大于;返回-1 -> 小于)
	Collections.sort(list, new Comparator<T>{
		public int compare(T o1,T o2){
			return (int)Math.signum(o1.属性-o2.属性);
		}
	});
	// 字符串编码 -> 按照字符中的字符编码进行比较
	// 比较两个字符串的时候:0 -> 相等、正数 -> 第一个大、负数 -> 第二个大
	// 先比较前一个字符,相同再比较第二和字符编码大小以此类推
	String o1 = "李";
	String o2 = "王";
	o1.compareTo(o2);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值