——Collection集合的概述

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

集合类

为什么出现集合类?

面对对象语言对事物的描述都是以对象的形式,

所以为了方便对多个对象操作,就对对象进行

存储,集合存储对象最常用的一种方式。


数组和集合类同时容器,有何不同?

1,数组虽然也可以存储对象,但长度是固定的;

2,集合长度是可变的。

3,数组中可以存储基本数据类型和引用类型,集合只能存储对象。

集合类的特点:

1,集合只用于存储对象;

2,集合长度是可变的;

3,集合可以存储不同类型的对象。

              注:集合中存储的都是对象的引用(地址)。

   Iterator迭代器:(类似于玩具城的一个投币抓取玩具的机器,它们内部都有一个夹子用于取玩具,这个夹子相当于迭代器)

用于取出集合中元素的方式。

集合框架:

    为什么会出现这些集合框架呢?

因为每个容器对数据的存储方式都有不同。

这个存储方式称之为:数据结构。

集合框架图:


    各个集合的特点:

     List(元素有序,带下标的,可重复)

         |--ArrayList:

        底层的数据结构使用的是数组结构,特点是查询的效率高,但是增删稍慢。

   注:线程不同步

   初始化默认容量为10的空列表,且每次增加50%的容量。

         |--LinkedList:

        底层使用的是链表结构,增删效率高,遍历效率低。

         |--Vector:

        底层是数组的数据结构。线程时同步的,所以查询效率低。功能和ArrayList一样。

        注:初始化默认容量为10的空列表,且每次增加100%的容量。

    Set(元素无序,不带下标的,不可重复)操作和Collection方法一样

         |--HashSet:

             底层数据结构是哈希表。按照哈希值存储。哈希表在存储时先判断哈希值是否一样,

             若哈希值不一样则直接存储,若哈希值一样,则在比较是否是同一对象。如果是,则返回false。

             HashSet是如何保证元素的唯一性呢?

             是通过元素的两个方法:hashCode() 和 equals()两个方法。

             如果元素的哈希值不相同,不会判断equals是否为true。

             当哈希值不同的时候才会调用equals方法进行判断。

         |--TreeSet:可以对Set集合中的元素进行自然排序。

                   底层数据结构是二叉树。

                   保证元素唯一性的依据是:compareTo方法返回值为0;

 步骤:

1,元素类实现Compareable接口,实现compareTo方法。

 特点:

     一,TreeSet:在存储数据的时候要求元素对象必须具有比较性,即实现Compareable接口。

并实现其中的compareTo方法;其返回值为正整数,0,负整数。零表示相等。

     二,当主要条件比较之后,还要比较次要条件。

     三,如果compareTo方法返回值是0,则不添加元素。

     四,输出的时候是按照二叉树的由小到大输出的,如果要按顺序输出,则compareTo方法要返回都是正整数。

 倒序输出则是,要compareTo方法返回是负整数。

     五,TreeSet的第二种排序方式。

 当元素自身不具备比较性时,或者具备的比较性不是所需要的。

 这时就需要集合自身具备比较性。TreeSet的构造函数初始化时给定比较性

 步骤:
1,定义一个类实现Comparetor接口,重写compare方法。

2,将定义的类对象,作为TreeSet初始化时,构造函数的参数。

 
集合中常用的基本方法:

   1,添加:

1.1,boolean add(E e):用于向集合红在哪个添加当元素。

1.2,boolean addAll(Collection<? extends E> c) 

             将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。


   2,获取:

2.1,int size():返回该集合中的元素个数

2.2, boolean contains(Object o) 

              如果此 collection 包含指定的元素,则返回 true。

2.3, boolean isEmpty() 

              如果此 collection 不包含元素,则返回 true。

2.4, boolean containsAll(Collection<?> c) 

          如果此 collection 包含指定 collection 中的所有元素,则返回 true。  

   3,修改:

3.1, boolean retainAll(Collection<?> c) 

              获得该集合与指定集合元素的交集,耳朵没有则该集合返回为0个元素的集合。 

   4,删除:

4.1,boolean remove(Object o) 

             从此 collection 中移除指定元素的单个元素,如果存在的话(可选操作)。 

4.2,boolean removeAll(Collection<?> c) 

             移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 

4.3,void clear() 

             移除此 collection 中的所有元素(可选操作)。

   5,比较:

List集合中元素的比较会自动调用equals()来进行比较,所以如果集合中的元素为自定义类型时,要重写equals方法。

集合共性方法的示例代码:

package com.itheima.collectiondemos.collection;

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


/**
 * 集合的共性方法演示类
 * 共性的方法是:
 * 1,add(Object obj);//添加一个元素
 * 2,remove(Object obj);//删除一个元素
 * 3,clear();//清空集合
 * 4,iterator();获取集合的迭代器
 * @author wuyong
 *
 */
public class CollectionGenericMethodsTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		sop("=============添加=============");
		methods_add();
		sop("=============删除=============");
		methods_del();
		sop("=============查看=============");
		methods_read();
		sop("=============修改=============");
		methods_update();
	}

	public static void methods_add() {
		Collection coll = new ArrayList();
		//通过add(Object obj)方法添加单个元素
		coll.add("abc1");
		coll.add("abc2");
		coll.add("abc3");
		coll.add("abc4");
		ArrayList al = new ArrayList();
		al.add("123");
		al.add("456");
		//通过addAll(Collevtion
   
   
    
     col)方法向集合中添加另一个集合中的元素。
		coll.addAll(al);
		
		sop("coll集合添加对象后的长度是:" + coll.size());
	}
	public static void methods_del() {
		Collection coll = new ArrayList();
		//通过add(Object obj)方法添加单个元素
		coll.add("abc1");
		coll.add("abc2");
		coll.add("abc3");
		coll.add("abc4");
		
		sop("删除前的coll是:" + coll);
		
		coll.remove("abc2");//删除指定元素
		sop("删除后的coll是:" + coll);
	}
	public static void methods_update() {
		Collection coll1 = new ArrayList();
		//通过add(Object obj)方法添加单个元素
		coll1.add("abc1");
		coll1.add("abc2");
		coll1.add("abc3");
		coll1.add("abc4");
		Collection coll2 = new ArrayList();
		//通过add(Object obj)方法添加单个元素
		coll2.add("abc5");
		coll2.add("abc2");
		coll2.add("abc8");
		coll2.add("abc4");
		sop("coll1在retainAll操作取交集之前的值:" + coll1);
		
		coll1.retainAll(coll2);//取得两个集合中相同的元素,若没有则调用方法的集合元素变为0;
		sop("coll1在retainAll操作取交集之后的值:" + coll1);
		
		coll1.clear();//清空集合
		sop("coll1清空后:" + coll1);
	}
	public static void methods_read() {
		Collection coll = new ArrayList();
		//通过add(Object obj)方法添加单个元素
		coll.add("abc1");
		coll.add("abc2");
		coll.add("abc3");
		coll.add("abc4");
		sop("集合coll的元素是:");
//		Iterator it = coll.iterator();//迭代器遍历
//		while(it.hasNext())
//			sop(it.next());
		//简写方法:
		for(Iterator it2 = coll.iterator(); it2.hasNext();){
			sop(it2.next());
		}
	}
	
	/**
	 * 自定义输出方法
	 * @param obj
	 */
	public static void sop(Object obj) {
		System.out.println(obj);
	}
}

   
   


List:

   List接口中的特有方法:

   1,增:

    1.1,add(int index,Object element);在集合指定位置插入元素

      1.2,add(int index,alection<E> al);在指定位置插入一个集合的元素

   2,查:

    2.1,int get(int index);获得指定位置的元素

    2.2,List sublist(int offset,int end);获得从offset(包含)位置到end(不包含)位置的子集合

    2.3,int indexOf(Object obj)//获取元素在集合中的索引。

    2.4,listIterator listIterator();//获得list迭代器,该迭代器是List中特有的迭代器,是iterator的子接口。

    //且可以对集合的元素进行添加,删除,获取,修改。
   3,删:

    remove(int index);删除指定位置的元素

   4,改:

    set(int index,Object element);设置指定位置的元素为element。

  注:List中的listIterator()方法的特殊之处。

   ListIterator是List集合特有的迭代器,是Iterator的子接口。

   在迭代时,不可以通过集合对象的方法操作集合中的元素。

   因为会发生ConcurrentModificationException异常。


   所以,在迭代器时,只能用迭代器的方式操作元素,可是Iterator方法的功能时有限的。

   只能对元素进行判断,取出,删除的操作。

   如果要再迭代时,执行添加,修改等,就需要使用其子接口,ListIterator.

   注:该接口只能通过List集合的listIterator()方法获取。所以,只有List及其子类可以使用。 


List集合特有方法的示例代码:

package com.itheima.collectiondemos.list;

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

/**
 * List接口中的特有方法示例
 * @author wuyong
 *
 */
public class ListMethodTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
		sop("=============添加=============");
		methods_add();
		sop("=============删除=============");
		methods_del();
		sop("=============查看=============");
		methods_read();
		sop("=============修改=============");
		methods_update();
	}
	
	public static void methods_add() {
		List list = new ArrayList();
		//通过add(Object obj)方法添加单个元素
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		list.add("abc4");

		//通过add(int index,Object obj)方法添加单个元素
		list.add(2,"123");
		list.add(3,"456");
		
		sop("list集合添加对象后的长度是:" + list.size());
	}
	public static void methods_del() {
		List list = new ArrayList();
		//通过add(Object obj)方法添加单个元素
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		list.add("abc4");
		
		sop("删除前的list是:" + list);
		
		list.remove("abc2");//删除指定元素
		list.remove(0);//删除指定位置的元素
		sop("删除后的list是:" + list);
	}
	public static void methods_update() {
		List list = new ArrayList();
		//通过add(Object obj)方法添加单个元素
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		list.add("abc4");
		sop("修改前的list是:" + list);
		list.set(2, "QQ");//用set(int index,Object element)修改指定位置的元素
		sop("修改后的list是:" + list);
	}
	public static void methods_read() {
		List list = new ArrayList();
		//通过add(Object obj)方法添加单个元素
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		list.add("abc4");
		
		sop("索引2位置的元素时:" + list.get(2));
		
		//使用Iterator迭代器时,只能对集合进行判断,取出,删除操作。
		for(Iterator it2 = list.iterator(); it2.hasNext();){
			Object obj = it2.next();
			if (obj.equals("abc2")) {
				it2.remove();//可以进行删除操作
//				list.add("WW");//次操作引发异常。
			}
			sop(obj);
		}
		sop("Iterator迭代时删除后的list集合是:" + list);
		
		for(ListIterator listIt = list.listIterator();listIt.hasNext();){
			Object obj = listIt.next();
			if (obj.equals("abc1")) {
//				listIt.remove();//可以进行删除操作
				listIt.set("QQ");
				listIt.add("WW");//添加成功!
			}
		}
		sop("ListIterator迭代时,对应的操作后的list集合是:" + list);
	}
	
	/**
	 * 自定义输出方法
	 * @param obj
	 */
	public static void sop(Object obj) {
		System.out.println(obj);
	}
}

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值