java---集合 (一)

区分集合和数组:

  • 数组:数组是可以存储不同类型的多个数据,数据类型可以使简单数据类型也可以是引用数据类型。
  • 缺点:创建的是一个定值,只能存储固定长度的数据,一旦存满了,就不能继续存储下去了。

 

  • 集合:集合也是可以存储不同类型的多个数据,但是只能存储引用数据类型
  • 缺点:只能存储引用数据类型。
  • 优点:存储空间会随着存储数据的增大而增大,所以可以更加合理的利用内存空间。

 

数据存储的分类

短期存储:一旦计算机关闭,存储的内容会被立刻释放----例如:变量,对象,数组,集合等

长期存储:直接存储在磁盘上,可以长久的保存,数据不会随着计算机的关闭而消失----  例如: .mp4,.doc,.jpg等格式的文件

 

Collection:----(一个接口)

  • List---(一个接口):存储的数据时有序的(这里的有序指的是元素的顺序与添加元素的顺序一致),可以重复的。
  1. ArrayList ---(类):底层的数据结构是数组,线程不安全的。 特点:查找速度快,添加删除速度慢。
  2. Vector ---(类):同ArrayList一样,只是线程安全的。
  3. LinkedList(类):底层是链表,线程不安全的。  特点:查找速度慢,添加删除速度快

Collection

public class Demo04 {
	
	public static void main(String[] args) {
		    Collection collection = new ArrayList<>();
		    //Collection中定义是整个集合体系最共性的方法:
		    //1.添加:
		    //boolean add(Object o) 
			collection.add("java");
			collection.add("php");
			collection.add("IOS");
			System.out.println(collection);
		    //boolean addAll(Collection<? extends E> c)
			Collection collection1 = new ArrayList<>();
			collection1.add("python");
			collection1.add("html");
			collection.addAll(collection1);
			System.out.println(collection);
			//2.删除:
		    //boolean remove(Object o) 
			//collection.remove("html");
			//System.out.println(collection);
			
		    //boolean removeAll(Collection<?> c)----删除定义的一批元素,但是collection里面不一定包含collection1 的所有内容
			//collection.removeAll(collection1);
			//System.out.println(collection);
			
			
			//void clear()---清空collection里面的元素,但是变成了空集合,空集合不等于null
			//collection.clear();
			//System.out.println(collection);
			
			
			//3.判断:
			//boolean contains(Object o) ---是否包含一个元素
			System.out.println(collection.contains("java"));
			//boolean containsAll(Collection<?> c)---是否包含多个元素
			
			//boolean isEmpty() //判断集合是否为空
			System.out.println(collection.isEmpty());//false
			
			//boolean equals(Object o) ---比较的是集合的内容
			Collection collection2 = new ArrayList<>();
			collection2.addAll(collection);
			
			System.out.println(collection.equals(collection2));//true
			
			
			
			
			
			//int size() //获取集合中对象的个数
			System.out.println(collection.size());
			
			
			//5.集合变数组:
			//Object[] toArray()----当我们希望集合的长度固定下来的时候就转成数组
			Object[] objects = collection.toArray();
			for(Object object :objects) {
				System.out.println(object);
			}
			test(collection);
	}
	
	//4.获取:(重点!!!)
	//Iterator<E> iterator() //获取集合中的对象,对集合实现遍历(迭代器)
	/*
	 * boolean hasnext():判断当前的位置是否存在元素,存在返回true,不存在返回false
	 * Object next():将当前位置的元素返回,并且指向当前位置的指针指向下一个位置
	 */
	public static void test(Collection collection) {
		//1.获取迭代器对象
		Iterator iterator =  collection.iterator();
		//2.通过方法实现遍历
		while (iterator.hasNext()) {
			Object object = (Object) iterator.next();
			System.out.println("元素:  "+object);
		}
		
		//注意点:
		//1.直接再次使用第一次的iterator进行遍历,遍历失败,因为当前的指针已经指向了结婚的最后,再次使用hasnext会直接返回false,所以如果想再次遍历,要重新获取迭代器对象
		while (iterator.hasNext()) {
			Object object = (Object) iterator.next();
			System.out.println("元素1  "+object);
			
		}
		//2.集合可以同时存储不同类型的数据
		
		collection.add(4);//存储的是:new Integer(4)---自动装箱
		
		
		//3.再次遍历  --- 当集合中同时存在不同类型的数据时(注意点2,加入了integer类型的数据),需要进行容错处理和向下转型。
		Iterator iterator1 = collection.iterator();
		while (iterator1.hasNext()) {
			Object object = (Object) iterator1.next();
			if (!(object instanceof String)) {
				throw new ClassCastException();//类型转化异常
			}
 			
			//向下转型
			String string = (String)object;
			System.out.println(string.length());
		}
		
		
	}

}

 

List

public class Demo05 {
	public static void main(String[] args) {
		List list = new ArrayList();
		// * List:特有方法,可以操作下标
		// 1.增:
		// void add(int index, E element)
		list.add("java");
		list.add(0, "php");
		list.add("html");
		list.add("html2");
		list.add("html3");
		System.out.println(list);
		// boolean addAll(int index, Collection<? extends E> c)

		// 2.删
		// E remove(int index)
		System.out.println(list.remove(0));

		// 3.改
		// E set(int index, E element)
		list.set(0, "c");
		System.out.println("list");
		// 4.查
		// ListIterator<E> listIterator()\
		test(list);
		// 返回此列表元素的列表迭代器(按适当顺序)。
		// ListIterator<E> listIterator(int index)
		// List<E> subList(int fromIndex, int toIndex)
		List sub = list.subList(1, 3);// 包含开头不包含结尾
		System.out.println(sub);

		// E get(int index)
		System.out.println(list.get(0));

		// 5.删除全部对象
		// list.clear();

	}
	// 4.查
	// ListIterator<E> listIterator()
	public static void test(List list) {
		
		ListIterator iterator = list.listIterator();
		//从左到右遍历
		while(iterator.hasNext()) {
			Object object = iterator.next();
			System.out.println("从左到右:"+object);
		}
		System.out.println();
		
		while(iterator.hasPrevious()) {
			Object object = iterator.previous();
			System.out.println("从右到左:"+object);
		}
		
		
		//注意事项:
		while(iterator.hasNext()) {
			Object object = iterator.next();
			System.out.println("从左到右:"+object);
			
			//需求:将html删除
			if (object.equals("html2")) {
				//在使用迭代器期间,使用list的删除方法直接删除元素,有可能发生错,所以不要这么做
				//list.remove("html2");
				//使用迭代器自带的remove方法进行删除,注意:他的remove,add,set方法尽量不要同时使用
				iterator.remove();
				
			}
		}
		
		System.out.println(list);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值