java笔记2——集合Collection

目录

 

一、为什么会有集合?数组不能满足使用吗?

二、数组和集合的区别

三、集合

1)Collection的功能概述:

2)Collection接口的实现:

3)Collection集合的高集功能的测试:

4)Collection集合的遍历(依次获取集合中元素)

5)集合的使用步骤


一、为什么会有集合?数组不能满足使用吗?       

首先Java是面向对象的语言,需要通过对象体现。为了方便对多个对象进行操作,我们需要存储多个对象的容器。

目前学过的容器有StringBuffer和数组。但是StringBuffer的结果是字符串,无法满足全部需求。而数组不能够适应我们变化的需求,因为数组的长度是固定的。这个时候Java就提供了集合。

二、数组和集合的区别

         A:长度区别

                   数组的长度固定

                   集合的长度可变化

         B:内容区别

                   数组只能存储一种类型的元素

                   集合可以存储不同类型的元素

         C:元素的数据类型区别

                   数组能存储基础类型和引用类型

                   集合只能存储引用类型

三、集合

首先,针对不同的存储需求,Java提供了很多集合类。这些集合有共性,但是数据结构(数据的存储方式)的不同。通过提取集合共性,就形成了集合的继承体系。

                                                   集合体系图

Collection:集合的顶层接口,它的子体系有重复的,有唯一的,有无序的,有有序的

1)Collection的功能概述:

添加功能:

boolean add(E e) :添加一个指定元素

boolean addAll(Collection<? extends E> c):添加一个集合的元素

                             删除功能:

                                               void clear() :清除所有元素

                                               boolean remove(Object o) :移除一个元素

                                               boolean removeAll(Collection<?> c):移除一个集合的元素

                             获取功能:

                                              Iterator<E> iterator() :进行元素的遍历

                             判断功能:

                                             boolean contains(Object o) :判断集合是否包含指定元素

                                             boolean containsAll(Collection<?> c) :判断是否包含指定的集合元素

                                             boolean isEmpty():判断集合是否为空

                             长度功能:

                                             int size():元素的个数(集合没有length()方法)

                             交集功能:

                                             boolean retainAll(Collection<?> c)

                             把集合转换成数组:

                                             Object[] toArray()

2)Collection接口的实现:

因为Collection是一个接口类,因此不能实例化。所以:

Collection c=new Collection(); 是错误的

那么接口如何实例化呢?通过他的子类的具体实现类进行创建:

                                                        Collection c=new ArrayList();

3)Collection集合的高级功能的测试:

boolean addAll(Collection<? extends E> c):添加一个集合的元素

boolean removeAll(Collection<?> c):移除一个集合的元素

只要有一个元素(不必所有)就返回true

boolean containsAll(Collection<?> c) :判断是否包含指定的集合元素

只有包含所有元素,才叫包含,返回true

boolean retainAll(Collection<?> c)

假设有A,B两个集合,A对B做交集,交集的结果保存在A中,B不变,如果A发生了变化则返回true,否则返回false

4)Collection集合的遍历(依次获取集合中元素)

// 创建集合对象
		Collection c = new ArrayList();

		// 添加元素
		c.add("hello"); // Object obj = "hello"; 向上转型
		c.add("world");
		c.add("java");

		// 遍历
		// Object[] toArray():把集合转成数组,可以实现集合的遍历
		Object[] objs = c.toArray();
		for (int x = 0; x < objs.length; x++) {
			
	   // System.out.println(objs[x] + "---" + objs[x].length());
       //上面的实现不了,原因是objs是一个Object对象,而Object中没有length()方法
	   // 我们要想使用字符串的方法(输出元素的长度),就必须把元素还原成字符串
		   // 向下转型(obj->String)
			String s = (String) objs[x];
			System.out.println(s + "---" + s.length());
		}

利用迭代器遍历(集合专用遍历方式)

Collection c=new ArrayList();
		c.add("hello");
		c.add("world");
		c.add("java");
		//迭代器遍历
		Iterator it=c.iterator();
        //判断下一个元素是否存在
		while (it.hasNext()) {
			System.out.println(it.next());
		}

注:boolean hasNext()

          如果仍有元素可以迭代,则返回 true。

           E next()

          返回迭代的下一个元素。

 

利用for循环改写while,因为效率高

for(Iterator it = c.iterator();it.hasNext();){
			System.out.println(it.next());
		}

自定义对象的遍历,注意点,迭代器的使用

正确写法:

Collection c=new ArrayList();
		
		Student s1=new Student("花无缺",12);
		Student s2=new Student("小鱼儿",14);
		Student s3=new Student("小仙女",13);
		
		c.add(s1);
		c.add(s2);
		c.add(s3);
		
		Iterator it=c.iterator();
		
		while(it.hasNext()){
			Student s=(Student)it.next();
			System.out.println(s.getName()+"---"+s.getAge());
		}

易错点:

while(it.hasNext()){
System.out.println(((Student)it.next()).getName()+"--"+((Student)it.next()).getAge());
		}

产生的错误:java.util.NoSuchElementException  原因是每一个it.next()都是下一个集合元素,

假如集合元素是奇数个,就会报出这个异常,因此一次循环,不能多次使用it.next()方法,每一次使用都访问下一个对象。

5)集合的使用步骤

A:创建集合对象

B:创建集合元素对象

C:添加元素到集合中

D:遍历集合

                             a:通过集合对象获取迭代器对象

                             b:通过迭代器对象的hasNext()方法判断元素是否存在

                             c:通过迭代器对象的next()方法获取元素并移动到下一个对象

猜你喜欢

转载自blog.csdn.net/elice_/article/details/81871606
今日推荐