java基础——集合框架(一)

集合框架(一)

一、Collection集合


1..首先我们来看看这张图:

这张图中反应了集合框架的整体结构。图中集合主要分为了Collection和Map,而Collection又分为List和Set,之后两者又可以细分。框架中包含了两个工具类Collections和Arrays,它们是集合类和数组所有工具,能实现排序,查找等操作。


2.Collection集合

        Collection集合可分为List和Set,其中List是有序的,元素存入集合的顺序和取出的顺序一致,元素都有索引,元素可以重复。而Set集合是无序的,存入和取出的顺序可能不一致,不可以存储重复元素,必须保证元素的唯一性。

        Collection集合一些常用方法:

1.添加:add(),addAll()

2.删除:clear(),remove(),删除集合中的指定对象,删除后,集合长度会改变。removeAll()

3.判断:contains(),isEmpty()

4.获取:size()

5.取交集:retainAll()

6.获取集合中的所有元素:Iterator iterator()

7.将集合变成数组:toArray()


3.Collection集合的遍历

通过Iterator来遍历Collection中的元素或对象。

通过while循环或者for循环。

Iterator it = list.iterator();
		while(it.hasNext()){
			sop(it.next());
		}

for(Iterator it = list.iterator();it.hasNext();){
			sop(it.next());
		}

二、List集合

    List本身是Collection接口的子接口,具备了Collection的所有方法。
List集合的层次结构:

List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。

|--ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。

|--LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。

|--Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。

由于List集合中的元素可以重复,那么如何去除其中的重复元素呢:

去除ArrayList中的相同元素:
List集合判断元素是否相同,依据是元素的equals方法。
1.定义一个ArrayList容器
2.将原集合中不同的元素通过add方法添加到新的ArrayList中去
public static ArrayList single(ArrayList list){
		//新建一个临时容器
		ArrayList list1 = new ArrayList();
		//遍历ArrayList集合中的元素
		Iterator it = list.iterator();
		while(it.hasNext()){
			Object obj = it.next();		
			if(!list1.contains(obj)){
				list1.add(obj);
			}
		}
		return list1;
	}

从中我们还看到了遍历List集合的方式,是通过Iterator实现的。

而List集合还有它自己特有的迭代器

ListIterator listIterator()list集合特有的迭代器。


接下来,如何遍历Vector中的元素呢,可以通过Enumeration来实现:

Enumeration e = v.elements();

		while(e.hasMoreElements()){
			System.out.println(e.nextElement());
		}

它的使用与Iterator类似。


三、Set集合


Set集合层次结构:

Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一种,迭代器。

|--HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效;

HashSet集合保证元素唯一性:通过元素的hashCode方法,和equals方法完成的。

当元素的hashCode值相同时,才继续判断元素的equals是否为true

如果为true,那么视为相同元素,不存。如果为false,那么存储。

如果hashCode值不同,那么不判断equals,从而提高对象比较的速度。

     |--LinkedHashSet:有序,hashset的子类。

|--TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步。TreeSet底层的数据结构就是二叉树。


接下来看看HashSet中存储元素的唯一性:

HashSet hs = new HashSet();
		hs.add("java01");
		hs.add("java02");
		hs.add("java03");
		hs.add("java04");
		hs.add("java01");
		
		Iterator it = hs.iterator();
		while(it.hasNext()){
			Object obj = it.next();
			sop(obj);//遍历后打印出的结果中自动除去重复的元素
		}

通过对比我们能发现:

对于ArrayList集合,判断元素是否存在,或者删元素底层依据都是equals方法。

对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法。


TreeSet通常用于对Set集合进行元素的指定顺序排序,排序要依据元素自身具备的比较性。


TreeSet排序有两种方式:

第一种:

让元素自身具有比较性。需要实现Comparable接口,覆盖compareTo方法。称这种方式为自然顺序。

//重写了compareTo方法
	public int compareTo(Object obj){
		if(!(obj instanceof Student))
			throw new RuntimeException("不是学生对象");
		Student s = (Student)obj;
		if(this.age>s.age)
			return 1;
		if(this.age==s.age){
			return this.name.compareTo(s.name);//字符串的比较
		}
		return -1;
	}

第二种:

定义一个类,实现Comparator接口,覆盖compare方法。

定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。

public int compare(Object o1,Object o2){
		Student s1 = (Student)o1;
		Student s2 = (Student)o2;
		int num = s1.getName().compareTo(s2.getName());//字符串的比较
		if(num == 0){
			return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
		}
	return num;
	}

第二种比较的方式较为灵活。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值