单列集合Collection

单列集合主要包括List和set两大类:list集合中的元素有序可重复,set集合中的元素无需不可重复。

注:若遇到要去除集合中重复元素的情况下,可以将数据存入set集合。

1. List:元素有序可重复

1. ArrayList:底层是通过数组来实现元素存储,所以再查找元素时效率较高(通过索引查找),但在对集合进行增加或删除操作时,都会重新创建一个新的数组,导致效率变慢,所以ArrayList不适合做大量的增删操作。

2. LinkedList:底层是通过一个双向循环链表存储元素的,所以增删较快,查找相对慢些。

3. Iterator迭代器(正向迭代)

主要用来遍历集合中的元素。

public static void main(String[] args) {
		List<Object> list = new ArrayList<Object>();//声明一个list集合
		Collections.addAll(list, 1.98,5,"hello",4,'d');//向集合中添加元素
		Iterator<Object> it = list.iterator();//通过集合对象获取迭代器对象
		while(it.hasNext()){//迭代
			Object value = it.next();
			System.out.println(value.toString());
		}		
	}

控制台输出结果:

1.98

5
hello
4
d

注:通过迭代器迭代的元素,对象类型为Object,在实际使用时可能需要进行类型转换。

在使用迭代器迭代的过程中,若删除某元素回导致迭代异常报错,如下

public static void main(String[] args) {
		List<Object> list = new ArrayList<Object>();//声明一个list集合
		Collections.addAll(list, 1.98,5,"hello",4,'d');//向集合中添加元素
		Iterator<Object> it = list.iterator();//通过集合对象获取迭代器对象
		while(it.hasNext()){//迭代
			Object value = it.next();
			if(value.toString()=="hello"){
				list.remove(value);//list集合的删除方法移除元素
			}
			System.out.println(list);
		}		
	}

解决方法1:在迭代过程中,删除元素后,执行break操作跳出循环

public static void main(String[] args) {
		List<Object> list = new ArrayList<Object>();//声明一个list集合
		Collections.addAll(list, 1.98,5,"hello",4,'d');//向集合中添加元素
		Iterator<Object> it = list.iterator();//通过集合对象获取迭代器对象
		while(it.hasNext()){//迭代
			Object value = it.next();
			if(value.toString()=="hello"){
				list.remove(value);
				break;
			}
			System.out.println(list);
		}		
	}

解决方法2:使用迭代器本身的删除方法remove()删除元素

public static void main(String[] args) {
		List<Object> list = new ArrayList<Object>();//声明一个list集合
		Collections.addAll(list, 1.98,5,"hello",4,'d');//向集合中添加元素
		Iterator<Object> it = list.iterator();//通过集合对象获取迭代器对象
		while(it.hasNext()){//迭代
			Object value = it.next();
			if(value.toString()=="hello"){
				it.remove();//迭代器方法移除元素
			}
			System.out.println(list);
		}		
	}

4. ListIterator迭代器(反向迭代)

public static void main(String[] args) {
		List<Object> list = new ArrayList<Object>();//声明一个list集合
		Collections.addAll(list, 1.98,5,"hello",4,'d');//向集合中添加元素
		Iterator<Object> it = list.listIterator(list.size());//通过集合对象获取反向迭代器对象
		while(it.hasNext()){//迭代
			Object value = it.next();
			System.out.println(value.toString());
		}		
	}

注:在迭代过程中若要删除元素,也需要使用迭代器本身的方法,否则会出现异常

5. forEach()循环

public static void main(String[] args) {
		List<Object> lists = new ArrayList<Object>();//声明一个list集合
		Collections.addAll(lists, 1.98,5,"hello",4,'d');//向集合中添加元素
		for (Object list : lists) {
			System.out.println(list);
		}	
	}

注:在forEach循环过程中无法对元素进行操作

循环效率:for循环>迭代器>forEach循环

2. Set:不可重复

1. HashSet:根据对象的哈希值来确定元素在集合中的存储位置。存取和查找效率较快

2.TreeSet:以自平衡二叉树的方式存储元素,可以实现对集合中元素的排序

3. HashSet向集合中添加元素时,首先调用hashCode()方法确定元素存储的位置,之后调用equals()方法来确保没有重复元素。

若要确保集合中对象都不重复,则可在对象实体类中实现hashCode()和equals()方法。

4. TreeSet向集合中添加元素时,为确保元素的有序不可重复,内部会调用compareTo()方法进行比较排序。

Integer,Double,String等都实现了CompareTo(),所以在存储Integer等类型元素时,会自动排序去重,对于没有实现CompareTo()的类,要实现去重排序,可自定义实现。

5. 迭代器遍历set集合

public static void main(String[] args) {
		Set<Object> sets = new HashSet<Object>();//声明一个set集合
		Collections.addAll(sets, 1,4,32,23,'r',0.23);
		Iterator<Object> it = sets.iterator();
		while(it.hasNext()){
			Object value = it.next();
			System.out.println(value);
		}	
	}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值