java学习总结:Colletion集合

集合框架(对象数组类的概述和引用)

package com.hema.Collection;

public class Demo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// int[] arr = new int[5];   //创建基本数据类型数组
		String[] arr = new String[5];   //创建引用数据类型数组
		arr[0] = new String("张三");		//创建一个学生对象,存储在数组的第一个位置
		arr[1] = new String("张三");		//创建一个学生对象,存储在数组的第二个位置
		arr[2] = new String("张三");		//创建一个学生对象,存储在数组的第三个位置
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

	@Override
	public String toString() {
		return "Demo1 [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
				+ "]";
	}

}

数组和集合的区别
区别1:数组既可以存储基本数据类型,又可以存储引用数据类型
集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
区别2:
数组长度是固定的,不能自动增长
集合的长度是可变的,可以根据元素的增长而增长

数组和集合什么时候用?
如果元素是固定的推荐用数组
如果元素个数不是固定的推荐用集合

集合继承体系图在这里插入图片描述

Colletion集合的基本功能

add方法如果是List集合一直都返回ture,
如果是Set集合当存储重复元素的时候,就会返回false

ArrayList的 父类的父类重写了toString方法,所以在打印对象的引用的时候,输出的结果不是Object类中toString的结果

package com.hema.Collection;

import java.util.ArrayList;
import java.util.Collection;

public class Demo_Collection {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Collection c = new ArrayList();
		c.add("a");
		c.add("b");
		c.add("c");
		c.add("d");
		
		c.remove("b");    				//删除指定元素
		c.clear();   						//清空集合
		System.out.println(c.contains("b"));
		System.out.println(c.isEmpty());
		System.out.println(c.size()); 		//获取元素个数
		System.out.println(c);
		}

}

集合的遍历

package com.hema.Collection;

import java.util.ArrayList;
import java.util.Collection;

public class Demo_Collection1 {

	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		@SuppressWarnings("rawtypes")
		Collection c = new ArrayList();
		c.add("a");
		c.add("b");
		c.add("c");
		c.add("d");
		
		Object[] arr = c.toArray();			//将集合转换为数组
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

}

Colletion集合的带All的功能

package com.hema.Collection;

import java.util.ArrayList;
import java.util.Collection;

public class Demo_CollectionAll {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//Demo1();
		//Demo2(); 
		Collection c5 = new ArrayList();
		c5.add("a");
		c5.add("b");
		c5.add("c");
		c5.add("d");
		
		Collection c6 = new ArrayList();
		c6.add("a");
		c6.add("b");
		c6.add("z");
		
		//取交集,如果调用的集合改变就返回true,如果调用的集合不变就返回false
		boolean b = c5.retainAll(c6);     //取交集
		System.out.println(b);
		System.out.println(c5);			//结果为true [a, b]
	}

	private static void Demo2() {
		Collection c3 = new ArrayList();
		c3.add("a");
		c3.add("b");
		c3.add("c");
		c3.add("d");
		
		Collection c4 = new ArrayList();
		c4.add("a");
		c4.add("b");
		c4.add("z");
		boolean b = c3.contains(c4);		//判断是否包含
		System.out.println(b);				//结果为false
	}

	private static void Demo1() {
		Collection c1 = new ArrayList();
		c1.add("a");
		c1.add("b");
		c1.add("c");
		c1.add("d");
		
		Collection c2 = new ArrayList();
		c2.add("a");
		c2.add("b");
		c2.add("c");
		c2.add("d");
		
		//c1.add(c2);			//将c2看成一个对象添加到c1中 结果为 [a, b, c, d, [a, b, c, d]]
		c1.addAll(c2);			//将c2中的每一个元素添加到c1中   结果为[a, b, c, d, [a, b, c, d]]
		System.out.println(c1);
	}

}

集合的遍历之迭代器原理

迭代器概述
* 集合是用来存储元素,存储元素需要查看,那么就需要迭代(遍历)
迭代器原理:
迭代器是对集合进行遍历,而每一个集合内部的储存结构是不同的,所以每一个集合存和取都是不一样的,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上收取出接口,然后在每个类的内部,定义自己的迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法第二,代码有底层内部实现,使用者不用管怎么实现的会用就可以
迭代器源码解析:
1,在ecplice中ctrl+shift + t 找到ArrayList类
2.ctrl + o 查找iterator()方法
3.查看返回值类型是new Itr()说明这个类实现iterator接口
4,查找itr这个内部类,发现重写了iterator中的所有抽象方法

public class Test3 {  
  
    public static void main(String[] args) {  
        List<String>list=new ArrayList<>();  
        list.add("a");  
        list.add("b");  
        Iterator<String>it=list.iterator();//得到lits的迭代器  
        //调用迭代器的hasNext方法,判断是否有下一个元素  
        while (it.hasNext()) {  
            //将迭代器的下标移动一位,并得到当前位置的元素值  
            System.out.println(it.next());    
        }     
    }  
}  

首先,创建了一个List的集合对象,并放入了俩个字符串对象,然后通过iterator()方法得到迭代器。iterator()方法是由Iterable接口规定的,ArrayList对该方法提供了具体的实现,在迭代器Iteartor接口中,有以下3个方法:

1.hasNext() 该方法英语判断集合对象是否还有下一个元素,如果已经是最后一个元素则返回false

2.next() 把迭代器的指向移到下一个位置,同时,该方法返回下一个元素的引用

3.remove() 从迭代器指向的Collection中移除迭代器返回的最后一个元素,该操作使用的比较少。

注意:从Java5.0开始,迭代器可以被foreach循环所替代,但是foreach循环的本质也是使用Iterator进行遍历的。

List特有功能

package com.hema.Collection;

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

public class Demo_List {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list = new ArrayList();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		
		list.add(111);		//删除的时候不会自动装箱,111当做所以
		
		list.add(1,"e");
		System.out.println(list);		//结果为[a, e, b, c, d]
		Object obj = list.remove(1);	//	通过所以删除,将删除后的元素返回
		Object obj1 = list.get(0);
		System.out.println(obj1);		//结果为a
	}

}

List存储学生类并遍历

并发修改异常及解决方案

package com.hema.Collection;

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

public class Demo3 {
/*
 * 案例:我有一个集合,请问,我想判断里面有没有”world“这个元素,如果有我就添加一个”javaee“元素
 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list = new ArrayList();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("world");
		list.add("d");
		list.add("e");
//		错误异常方法		
//		Iterator it = list.iterator();		//获取迭代器
//		while(it.hasNext()) {					//判断集合中是否有元素
//			String str = (String)it.next();		//向下转型
//			if("world".equals(str)) {
//				list.add("javaee");				//遍历的同时在增加元素,并发修改ConcurrentModificationException
//		}	
		
		//解决方案
		ListIterator lit = list.listIterator();
		while(lit.hasNext()) {					//判断集合中是否有元素
			String str = (String)lit.next();		//向下转型
			if("world".equals(str)) {
				lit.add("javaee");	
			System.out.println(list);
		}
	}
	}
}


在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值