java基础(17)、集合类(1:Collection)

一.  什么是集合类?

二.  Collection接口

  2.1  Collection子接口(List接口和Set接口)

  2.1  Collection的常用方法

三.  迭代器(Iterator)

  3.1  关于迭代器

  3.2  迭代其的用法

  3.3  迭代器的简化:增强for循环

  3.4  使用迭代器向集合添加元素

四.  List接口

  4.1  List接口的方法

  4.2  List接口的实现类

  4.3  List遍历的方法

  4.4  并发修改异常


一.  什么是集合类?

  放了方便对多个对象操作,需要一个能对对象存储的容器,它得具备:1、可以存不同的对象类型,2、容器的长度可变(放多少个对象进来就有多大);

就酱~~ 满足这要求的容器就是集合啦;特点如下图~


二.  Collection接口

Collection:集合框架的顶层接口。表示一组对象,这些对象也称为 collection 的元素。

2.1  Collection子接口

Collection有两个子接口,他们的特点是:

  List接口:可存放重复的元素,元素存取是“有序”的;

  Set接口:不可以存放重复的元素,通常元素存取是“无序”的,也有一些实现类是“有序”的。

注意:上方提到的“有序,无序”指的是存放元素时是否会记住元素的存放顺序;并非对元素进行“排序”。 

2.2  Collection接口中的常用方法【返回类型  方法名(形参)】

添加操作

  • boolean add(boject e):确保此 collection 包含指定的元素(可选操作)。
  • boolean addAll(Collectiong c):将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。

删除操作

  • void clear():移除此 collection 中的所有元素(可选操作)。
  • boolean remove(object o):从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
  • boolean removaAll(Collection c): 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。

查询操作

  • int size():返回此 collection 中的元素数

判断操作

  • boolean isEmpty():如果此 collection 不包含元素,则返回 true
  • boolean contains(Object obj):如果此 collection 包含指定的元素,则返回 true
  • boolean containsAll(Collection c):如果此 collection 包含指定 collection 中的所有元素,则返回 true

迭代操作

  • Iterator iterator():返回在此 collection 的元素上进行迭代的迭代器。

三.  迭代器:Iterator

3.1  关于迭代器

迭代是取出集合中元素的一种方式,因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器;迭代器的next方法返回值类型是Object,所以要记得类型转换。

迭代器读取元素示意图

1     Collection c = new ArrayList();    //创建集合对象
2     Iterator it = c.iterator();    //获取此集合的迭代器
3     while(it.haxNext()){        //遍历这个集合
4         Object o = it.next();
5     }

  说明

  1、迭代器不保证取出元素的顺序和存入的顺序一致,“有些”是靠集合实例本身保证的;

  2、迭代器本身是一个接口,该方法返回的是一个迭代器实例对象,通常使用的是接口多态使用迭代器;

  3、迭代器中常用的两个方法是:

    boolean hasNext():判断是否有下一个元素;

    boolean next();取出下一个元素。

3.2  迭代器的两种用法 

 1  //迭代器用法一
 2  for(Iterator iter = iterator();iter.hasNext();){
 3      System.out.println(iter.next());
 4  }
 5
 6  //迭代器用法二
 7  Iterator iter = l.iterator();
 8  while(iter.hasNext()){
 9      System.out.println(iter.next());
10  }

3.3  增强for循环:迭代器的一种简化方法

1     //for(数据类型 迭代变量名:集合对象)
2     for(Object obj : c){
3         //do something with obj
4     }

3.4  如何使用迭代器添加集合元素?

iterator接口没有添加元素的方法,但是它的子接口ListIterator有,故:用ListIterator迭代,迭代器添加元素。(集合本身迭代,使用集合本身方法添加元素,如add


四.  List接口

4.1  List接口方法

特有方法

  • void add(int index,Object element):在列表的指定位置插入指定元素(可选操作)。
  • Object get(int index):返回列表中指定位置的元素。
  • Object set(int index,Object element):用指定元素替换列表中指定位置的元素(可选操作)。

4.2  List接口的实现类

  • ArrayList:线程不安全,查询速度块,底层用的是数组,增删慢;
  • LinkedList:线程不安全,链表结构,增删速度快,查询慢;
  • Vector:线程安全,但速度慢,已被ArrayList替代

4.3  List接口遍历的方法

1.  迭代器遍历

1 //迭代器遍历list
2 Iterator it = list.iterator();
3 while(it.hasNext()){
4     Object obj = it.next();
5     System.out.println(obj);
6 }

2.  增强for循环

1 //增强for循环遍历集合
2 for(Object obj : list){
3     System.out.println(obj);
4 } 

3.  普通for循环配合get方法

1 //普通for循环,获取指定位置的元素
2 for(int i = 0;i<list.size();i++){
3     System.out.println(list.get(i));
4 }

4.4  并发修改异常

在使用迭代器遍历ArrayList的时候,若使用集合本身的方法修改了集合,将导致并发修改异常:ConcurrentModificationException,故需注意:

  • 使用迭代器遍历,使用迭代器删除元素
  • 使用集合本身遍历,使用集合本身方法删除元素


vector类

Vector类是1.0就已经有的,在1.2被整合到集合框架中,其中的大部分方法都和ArrayList相同,但它是线程安全的,所以效率要低,特有方法:

  • void addElement(E obj):将指定的组件添加到此向量的末尾,将其大小增加1。
  • void removeElement():从此向量中移除全部组件,并将其大小设置为零。
  • elements():返回此向量的组件的枚举。


LinkedList类

LinkedList类底层使用的是链表结构保存数据,绝大多数方法和ArrayList相同,只不过多了一些对首尾元素操作的方法

  • void addFirst(E e):将指定元素插入此列表的开头。
  • void addLast(E e):将指定元素添加到此列表的结尾。
  • E remove():获取并移除此列表的头(第一个元素)。

LinkedList底层使用的是链表,但是自己维护了一个索引,所以提供了get(int index)的方法来通过索引获取元素,但此方法的效率很低,一般不使用


小结:List接口的实现类选择

  是否需要线程安全: 如果是,可以选择Vector,但是可以通过其他方式让其他两种类也达到线程安全的,所以一般也不会使用Vector;

  如果不是,考虑是增删多还是查询多,增删多:使用LinkedList;查询多:使用ArrayList

原文地址:https://www.cnblogs.com/yiwanfan/p/8887591.html

时间: 2024-11-07 11:56:31

java基础(17)、集合类(1:Collection)的相关文章

JAVA基础【集合类与排序】

本章主题:在本章之中,对java集合  Collections.sort方法做一个简要的回顾. package test; /**  * @author Yshuai  * @version 创建时间:2014-08-20 上午09:49:36  */ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class 

Java基础17:Java IO流总结

Java基础17:Java IO流总结 IO流概述 在这一小节,我会试着给出Java IO(java.io)包下所有类的概述.更具体地说,我会根据类的用途对类进行分组.这个分组将会使你在未来的工作中,进行类的用途判定时,或者是为某个特定用途选择类时变得更加容易. 输入和输出 术语"输入"和"输出"有时候会有一点让人疑惑.一个应用程序的输入往往是另外一个应用程序的输出?那么OutputStream流到底是一个输出到目的地的流呢,还是一个产生输出的流?InputStre

java基础知识--- 集合类

常用集合类的使用 java中的集合,不管是List,Set,还是Map,都是继承自collection接口,这个接口主要定义了集合类的一些公关方法,比如isEmpty(), remove(),add()等,在使用集合类的时候除了顺序遍历,还提供了一种方便的迭代器遍历的方法,在遍历过程中需要remove元素的必须试用迭代器遍历(在删除元素时,集合内部的index会发生变化,使用顺序遍历可能会产生unindex的情况). 为了实现迭代遍历,定义了Iterable接口,collection接口继承了I

面试【JAVA基础】集合类

1.ArrayList的扩容机制 每次扩容是原来容量的1.5倍,通过移位的方法实现. 使用copyOf的方式进行扩容. 扩容算法是首先获取到扩容前容器的大小.然后通过oldCapacity (oldCapacity >> 1) 来计算扩容后的容器大小newCapacity.这里用到了>> 右移运算,即容量增大原来的1.5倍.还要注意的是,这里扩充容量时,用的时Arrays.copyOf方法,其内部也是使用的System.arraycopy方法. 区别: arraycopy()需要目

java基础---17. 静态static关键字

1 static关键字概述 2 静态static关键字修饰成员变量 2.1 定义一个学生类 public class Student { private String name; private int age; static String room; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { r

黑马程序员——java基础——集合(Collection)

 黑马程序员--java基础--集合(Collection) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 集合框架的构成及分类,如下图: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 3.

Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就是对数据结构的封装 数组与集合的比较 数组:长度固定,可以存储基本数据类型,也能存储对象 集合:长度可变,只能存储对象类型(由于有包装类的存在,集合可以存储任何类型) 集合的体系结构 集合也叫容器,用于存储对象 我们根据不同的需求和不同的数据结构来对集合做了不同的抽象 Collection接口-公共

java基础巩固系列(九):持有对象之间的使用与关系(Iterable、Collection、List、Queue、Set、Map、Stack)

总:Java提供了一套比较完整的容器类,基本类型是:List.Set.Queue.Map,这些对象类型称为集合类. 一.接口继承关系: Iterable接口,在java.lang包中,Collection.List.Queue.Set接口继承Iterable接口 可以看出来,List.Queue.Set这三个接口是在java.util包中,继承自Collection接口 Map接口不继承Collection接口,也不继承其它接口 二.Iterable与Iterator的关系 Iterable属于

java基础知识回顾之java集合类-Properties集合

/** java.lang.Object   |--java.util.Dictionary<K,V>      |--java.util.Hashtable<Object,Object>          |--java.util.Properties * @author Administrator *Properties集合:         * 特点:         * 1,该集合中的键和值都是字符串类型.         * 2,集合中的数据可以保存到流中,或者从流加载 

Java基础之Collection

Java基础之Collection 1.collection集合的概述 collection集合的概述 集合是java中用来存储数据的容器 collection是java集合中按照存储结构分类的单列集合:java.util.Collection Collection是单列集合的根接口,用于存储一系列符合规则的数据.Collection集合下有两个子接口:分别是java.util.List和java.util.Set. List中存储数据有序,可重复 list的实现类主要有java.util.Ar