我是靠谱客的博主 感性板栗,这篇文章主要介绍Java学习之集合框架【1】,现在分享给大家,希望可以做个参考。

【1】集合的由来?

           面向对象语音对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,java就提供了集合类。

【2】集合和数组的区别?

A:长度区别:数组长度是固定的,集合的长度是可变的

B:存储类型的区别:数组可以存储基本数据类型也可以存储引用数据类型,集合可以存储引用数据类型

C:内容区别:数组只能存储同种数据类型的元素,集合可以存储不同类型的元素

【3】集合继承体系图

【4】Collection的功能描述

A:添加功能:

                       boolean add(Object obj):添加一个元素

                       boolean addAll(Collection c):添加一个集合的元素(将一个集合中的所有元素添加进集合)

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

public class demo1 {
    public static void main(String[] args) {
        Collection collection=new ArrayList();
        ((ArrayList) collection).add("111");
        ((ArrayList) collection).add("222");
        ((ArrayList) collection).add("333");
        ((ArrayList) collection).add("444");
        System.out.println(collection);
        Collection collection1=new ArrayList();;
        ((ArrayList) collection1).add("苏东坡");
        ((ArrayList) collection1).add("白居易");
        ((ArrayList) collection1).add("穆桂英");
        ((ArrayList) collection1).add("夏牧子");
        System.out.println(collection1);
        boolean b=((ArrayList) collection).addAll(collection1);
        System.out.println(b);
    }
}

结果截屏如下:

B:删除集合:

                      void clear():移除所有元素

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

                      boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回true)删除的元素是两个集合的交集,如果没有删除元素就返回false


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

public class demo1 {
    public static void main(String[] args) {
        Collection collection=new ArrayList();
        ((ArrayList) collection).add("111");
        ((ArrayList) collection).add("222");
        ((ArrayList) collection).add("333");
        ((ArrayList) collection).add("444");
        collection.remove("111");
        System.out.println(collection);
        Collection collection1=new ArrayList();;
        ((ArrayList) collection1).add("苏东坡");
        ((ArrayList) collection1).add("白居易");
        ((ArrayList) collection1).add("穆桂英");
        ((ArrayList) collection1).add("夏牧子");
        System.out.println(collection1);
        boolean b=((ArrayList) collection1).addAll(collection);
        System.out.println(collection1);
        collection1.removeAll(collection);
        System.out.println(collection1);
        System.out.println(b);
        collection1.clear();
        System.out.println(collection1);
    }
}

结果截屏如下:

C:判断功能:

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

                      boolean containsSll(Collection c):判断集合中是否包含指定集合的所有元素,包含则返回true


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

public class demo1 {
    public static void main(String[] args) {
        Collection collection=new ArrayList();
        ((ArrayList) collection).add("111");
        ((ArrayList) collection).add("222");
        ((ArrayList) collection).add("333");
        ((ArrayList) collection).add("444");
        Collection collection1=new ArrayList();;
        ((ArrayList) collection1).add("苏东坡");
        ((ArrayList) collection1).add("白居易");
        ((ArrayList) collection1).add("穆桂英");
        ((ArrayList) collection1).add("夏牧子");
        boolean b=collection.contains("000");
        System.out.println(b);
        boolean b1=collection.contains("111");
        System.out.println(b1);
        boolean b2=collection1.containsAll(collection);
        System.out.println(b2);
        ((ArrayList) collection1).addAll(collection);
        System.out.println(collection1);
        boolean b3=collection1.containsAll(collection);
        System.out.println(b3);
    }
}

D:获取功能:

                     Iterator<E>iterator()重点重点重点

A:迭代器原理:每个集合都有内部类来实现Iterator接口,Iterator通过获取内部类的对象即迭代器对象,来调用next()方法或者hasnext()方法。

B:迭代器源码解析:

Iterator iterator=list.iterator();//获取迭代器对象
while(iterator.hasNext()){
    Object obj=iterator.next();//迭代器对象调方法
    System.out.println(obj);
}

C:用迭代器的方式遍历集合

E:长度功能:

                        int size():元素的个数【实例代码如下】

F:交集功能:

                      boolean retainAll(Collection c):获取两个集合的交集元素【实例代码如下】

G:集合转数组:Object[] toArray()其实就是依次获取集合中的每个元素【实例代码如下】

以上EFG的例子都在这个代码里实现:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

public class demo1 {
    public static void main(String[] args) {
        Collection collection=new ArrayList();
        ((ArrayList) collection).add("111");
        ((ArrayList) collection).add("222");
        ((ArrayList) collection).add("333");
        ((ArrayList) collection).add("444");
        Collection collection1=new ArrayList();;
        ((ArrayList) collection1).add("苏东坡");
        ((ArrayList) collection1).add("白居易");
        ((ArrayList) collection1).add("穆桂英");
        ((ArrayList) collection1).add("夏牧子");
        boolean b=collection.contains("000");
        System.out.println(b);
        boolean b1=collection.contains("111");
        System.out.println(b1);
        boolean b2=collection1.containsAll(collection);
        System.out.println(b2);
        ((ArrayList) collection1).addAll(collection);
        System.out.println(collection1);
        boolean b3=collection1.containsAll(collection);
        System.out.println(b3);
        System.out.println(collection.size());
        boolean b4=collection1.retainAll(collection1);//获取两个集合的交集元素
        System.out.println(b4);//没有共同元素,返回false
        Object[] objects=collection1.toArray();
        System.out.println(collection.size());
        System.out.println(Arrays.toString(objects));
    }
}

【5】附加题1:数组有没有length()方法?字符串有没有length()方法?集合有没有length()方法?

 数组是length属性,字符串有length()方法,集合用size()方法。

【6】List集合的特点功能:

List集合特点:元素有序,每个元素都有索引,允许存储重复元素

void add(int index,E element):在指定的索引处添加元素

E remove(int index):移除指定索引处的元素

E get(index):获取指定索引处的元素

E set(int index,E element);更改指定索引处的元素,返回的是被替换的元素

特有功能演示:


public class Listdemo {
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("333");
        list.add("345");
        list.add("321");
        list.add(2,"222");//给索引2的后面添加“222”元素
        System.out.println(list);
        list.remove(3);//移除索引3的元素
        System.out.println(list);
        System.out.println(list.get(1));//返回索引为1的元素
        list.set(0,0);
        System.out.println(list);

    }
}

结果如下:

【7】List集合的遍历功能

A:通过for循环 size(),get()方法结合使用遍历

B:ListIterator继承自Iterator 使用它的迭代器

C:使用List对象的Iterator

package Collection;

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

public class Listdemo2 {
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add(111);
        list.add(222);
        list.add(333);
        list.add(444);
        //遍历集合
        //方式1
        Iterator integer=list.iterator();
        while(integer.hasNext()){
            Object obj=integer.next();
            System.out.println(obj);
        }
        System.out.println("------------------");
        //方式2
        ListIterator listIterator=list.listIterator();
        while(listIterator.hasNext()){
            Object obj=listIterator.next();
            System.out.println(obj);
        }
        System.out.println("--------------------");
        //方式3
        for (int i = 0; i <list.size() ; i++) {
            Object obj=list.get(i);
            System.out.println(obj);
        }
    }
}

【8】Listerator的特有功能

ListIterator继承自Iterator 可以使用Iterator中的使用方法

A:boolean hasPrevious():是否存在前一个元素

B:E privious():返回列表的前一个元素

这两种方式可以实现反向遍历,但是要注意,要完成反向遍历之前,要先进行正向遍历,这样指针才能指到最后

如果直接反向遍历是没有效果的,因为指针默认位置就在最前面,它的前面没有元素

import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIterator的特有功能 {
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add(111);
        list.add(222);
        list.add(333);
        list.add(444);
        //正向遍历
        ListIterator listIterator=list.listIterator();
        while(listIterator.hasNext()){
            Object obj=listIterator.next();
            System.out.println(obj);
        }
        //逆向遍历
        System.out.println("------------------------------");
        ListIterator listIterator1=list.listIterator();
        while(listIterator.hasPrevious()){
            Object obj=listIterator.previous();
            System.out.println(obj);
        }
    }
}

【9】并发修改异常产生的原因及解决方案

举例:

package Collection;

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

public class CME {
    public static void main(String[] args) {
//        需求:我有一个集合,请问,我想判断里面有没有"world"这个元素
//        如果有,我就添加一个"javaee"元素,请写代码实现。
        List s=new ArrayList();
        s.add("hello");
        s.add("world");
        s.add("java");
        s.add("SE");
        Iterator integer=s.iterator();
        while(integer.hasNext()){
            Object obj=integer.next();
            String str=(String)obj;
            if(str.equals("world"))
            interger.add("javaee");
        }
        System.out.println(s);

    }
}

显示并发修改异常

原因:我们的迭代依赖集合,当我们往集合中添加好了元素之后,获取迭代器,此时迭代器已经知道了集合中元素的个数,这个时候你又想给集合中添加元素,迭代器当然不会同意的,直接给你报错

package Collection;

import java.util.*;

public class CME {
    public static void main(String[] args) {
//        需求:我有一个集合,请问,我想判断里面有没有"world"这个元素
//        如果有,我就添加一个"javaee"元素,请写代码实现。
        List s=new ArrayList();
        s.add("hello");
        s.add("world");
        s.add("java");
        s.add("SE");
        ListIterator listIterator1=s.listIterator();
        while(listIterator1.hasNext()){
            Object obj=listIterator1.next();
            String str=(String)obj;
            if(str.equals("world"))
            listIterator1.add("javaee");
        }
        System.out.println(s);

    }
}

解决方案:我们用ListIterator迭代器遍历,用迭代器自带的add方法添加元素,就不会报错

【10】数据结构之栈和队列

A:数据结构:数据结构其实就是存储数据的格式

B:分类:栈,队列,数组,链表,树,哈希表

C:栈特点:先进后出

D:队列特点:先进先出

【11】数据结构之数组和链表

A:数组特点:查询快,增删慢

B:链表特点:查询慢,增删快

【12】List的三个子类的特点:

A:ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高

B:Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低

C:LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,效率高

最后

以上就是感性板栗最近收集整理的关于Java学习之集合框架【1】的全部内容,更多相关Java学习之集合框架【1】内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部