Java之集合详解(一)

目录

一.集合概述:

二.collection常见方法

三.迭代器

四. 增强for循环


一.集合概述:

  1.1  集合简介:

  • 集合是Java提供的一种容器,能够存储多个数据。
  • Java 所有的集合类都位于 java.util 包下,提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类,还有一些实现算法

  1.2  集合和数组的区别:

  • 长度:集合的长度是可以变化的,数组长度是固定的
  • 存储数据:集合存储的全部是引用数据类型,数组既可以存储引用数据类型,也可以存储基本数据类型。数组只可以存储一种数据类型

注意:集合也可以存储基本数据类型,只要存储对应的包装类就可以了。如int-->integer

 list.add(20); //相当于自动装箱,Integer i=20;
       

  1.3  集合常用类的继承集合体系:

Java集合分为collction和Map两个根接口,这两个接口包含子接口(接口与接口之间可以继承)以及实现子类。

具体如下图:

Java之集合详解(一)_第1张图片

黄色是接口,蓝色是实现类;

  • Iterator接口是输出接口,用于遍历输出collection集合中的元素(迭代输出),literator对象就是迭代器, 当实现类是实现collection时,同时也要实现lierator。
  • collection有三个子接口,分别是java.util.List和java.utli.Set以及Java.util.queue。List存储不重复,有序的元素,set存储重复的元素,而Queue 是 Java 提供的队列实现
  • List接口的主要实现类有java.util.ArrayListjava.util.LinkedListSet接口的主要实现类有java.util.HashSetjava.util.LinkedHashSet

注意:接口只是提供一个规范,告诉我们必须要干什么。我们要对集合中的元素操作时,需要通过实现子类,实例化对象,调用方法,实现操作。

把集合分为接口,实现子类,算法这样更明显体现他的继承体系

如下图:

Java之集合详解(一)_第2张图片

二.collection常见方法: 

Collection是所有单列集合的父接口,对于他的子接口以及实现子类,collction的方法也是通用的。

2.1  collection常见方法以及作用:


1.void clear()    清空所有集合元素
2.boolean contains(Object o)    判断指定集合是否包含对象o
3.boolean contains(Object 0)  判断当前集合中是否包含给定的对象。
4.boolean isEmpty()    判断指定集合的元素size是否为0
5.boolean remove(Object o)    删除集合中的元素对象o,若集合有多个o元素,则只会删除第一个元素
7.int size()    集合的元素个数
8.T[] toArray(T[] a)    将集合转换为T类型的数组

9.boolean add(E e)    向集合添加元素e,若指定集合元素改变了则返回true

10 .Object[] toArray(): 把集合中的元素,存储到数组中.

代码演示:

public class Oopjihe {
    public static void main(String[] args) {
        //创建一个集合对象
        ArrayList list = new ArrayList();
        //判断集合长度
        int startsize=list.size();
        list.add("hello");
        list.add("add");
        list.add("20");
        list.add(20);
        //相当于自动装箱,
        Integer i=20;
        //判断长度
        int endsize=list.size();
        //移除某个元素
        list.remove("hello");
        //判断是否有这个元素
        boolean b1=list.contains("hello");
        System.out.println(b1);//flase
        //判断集合是否为空
        boolean b2=list.isEmpty();
        System.out.println(b2);//flase

        //清除所有元素
        list.clear();

        boolean b3=list.isEmpty();
        System.out.println(b3);//true

  2.2  方法拓展:

  get(int index) ;

  作用: 拿到集合中的对应下标的元素。

TocharAraary()或者TostringArrary():

作用:把集合中的元素转为char数组或者string数组

案例分析:

定义一个String类型的List集合,统计该集合中每个字符 (注意,不是字符串)出现的次数。
例如:集合中有”abc”、”bcd”两个元素, 程序最终输出结果为:“a = 1,b = 2,c = 2,d = 1”
import java.util.ArrayList;
public class Excel3 {
    public static void main(String[] args) {
        ArrayList strings = new ArrayList<>();
        strings.add("adc");
        strings.add("bcc");
        int count[]=new int[3];//计数器

        //把集合中的元素转为char数组
        for(int i=0;i//定义一个迭代器。输出集合中的元素
            Iterator iterator = arrayList.iterator();//获取迭代器
            while (iterator.hasNext()){//判断下一个是否有元素
                Object s=iterator.next();//下一个元素
                System.out.println(s);
            }

注意点:

  1. 在进行集合元素获取时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会抛出java.util.NoSuchElementException没有集合元素异常。

  2. 在进行集合元素获取时,如果添加或移除集合中的元素 , 将无法继续迭代 , 将会抛出ConcurrentModificationException并发修改异常.

  3. 如果一定要删除某个元素,使用迭代器自己的remove方法。

      Iterator iterator =list.iterator();
    
            while(iterator.hasNext()){
                System.out.println("长度为"+list.size());
    //            list.add("集合2");//在集合移除或者添加过程中,迭代获取元素会报错。
    //            list.remove("20");
               String name=iterator.next().toString();
               if("20".equals(name)){
                   iterator.remove();
               }else{
                   System.out.println(name);
               }

      3.3.  迭代器实现原理:

Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,

在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,调用next方法之前,会调用hasnext()方法判断下一个元素,如果为ture则调用next方法。

当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法之前,会再次调用hasnext()方法判断下一个元素,如果为ture则调用next方法。迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。

四.增强for循环:

 增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

for(变量类型 变量 :数组/集合){
    处理遍历的数据,数据就保存在这个变量上面
}

注意点:因为foreach底层采用了迭代器,因此遍历集合时不要对集合元素进行增删操作。  

案例

已知数组存放一批QQ号码,QQ号码最长为11位,最短为5位
String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"}。
将该数组里面的所有qq号都存放在LinkedList中,将list中重复元素删除,将list中所有元素分别用迭代器和增强for循环打印出来

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

public class Excel2 {
    public static void main(String[] args) {
        String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"};
        //定义一个集合
        ArrayList arrayList = new ArrayList();
        //将数组中的元素放到集合中
        for(int i=0;i

你可能感兴趣的:(Java基础知识总结,java,jvm,servlet)