首页 > 其他分享 >01-集合框架概述.

01-集合框架概述.

时间:2023-09-02 12:11:58浏览次数:38  
标签:01 add System println coll 概述 集合 out

01-集合框架概述.

1.内存层面需要针对于多个数据进行存储。此时,可以考虑的容器有:数组、集合类

2.数组存储多个数据方面的特点:

  • 数组一旦初始化,其长度就是确定的。
  • 数组中的多个元素是依次紧密排列的,有序的,可重复的
  • (优点)数组一旦初始化完成,其元素的类型就是确定的。不是此类型的元素,就不能添加到此数组中
  • (优点)元素的类型既可以是基本数据类型,也可以是引用数据类型。

数组存储多个数据方面的弊端:

  • 数组一旦初始化,其长度就不可变了。
  • 数组中存储数据特点的单一性。对于无序的、不可重复的场景的多个数据就无能为力了。
  • 数组中可用的方法、属性都极少。具体的需求,都需要自己来组织相关的代码逻辑。
  • 针对于数组中元素的删除、插入操作,性能较差。
  1. Java集合框架体系(java . util包下)

java. util. Collection:存储-一个-一个的数据

  • 子接口: List:存储有序的、可重复的数据(”动态“数组)
    |---- ArrayList(主要实现类)、LinkedList、Vector

  • 子接口: Set:存储无序的、不可重复的数据(类似于高中的集合)
    |---- HashSet、LinkedHashSet、TreeSet

    java.util.Map:存储一对—对的数据(key-value键值对,(x1,y1)、(x2,y2) --> y=f(x),类似于高中的函数)

  • HashMap、LinkedHashMap、TreeMap、Hashtable、Properties

4.学习的程度把握:

  • 层次1:针对于具体特点的多个数据,知道选择相应的适合的接口的主要实现类,会实例化,会调用常用的方法。

  • 层次2:区分接口中不同的实现类的区别。

  • 层次3:① 针对于常用的实现类,需要熟悉底层的源码熟悉常见的数据结构


ArrayList()

2.1添加

    /*
    2.1添加
    (1) add(Object obj):添加元素对象到当前集合中
    (2) addAll(Collection other):添加other集合中的所有元素对象到当前集合中,即this = this U other
     */
    public void test1(){
        Collection coll=new ArrayList();
        //add()
        coll.add("AA");
        coll.add(123);//自动装箱
        coll.add("性格");
        coll.add(new Object());
        coll.add(new Person("tom",12));
        System.out.println(coll);//[AA, 123, 性格, java.lang.Object@4617c264, Person{name='tom', age=12}]

        //addAll()
        Collection coll1=new ArrayList();
        coll1.add("www");
        coll1.add(465);

        System.out.println(coll.size());//5
        coll.addAll(coll1);
        System.out.println(coll);//[AA, 123, 性格, java.lang.Object@4617c264, Person{name='tom', age=12}, www, 465]
        //size():元素个数
        System.out.println(coll.size());//7
    }

image-20230901161015731

2.2判断

(3) int size():获取当前集合中实际存储的元素个数

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

(5) boolean contains(Object obj):判断当前集合中是否存在一个与obj对象equals返回true的元素

(6) boolean containsAl(Collection coll):判断coll集合中的元素是否在当前集合中都存在。即coll集合是否是当前集合的“子集”

(7) boolean equals(Object obj):判断当前集合与obj是否相等

 public void test2(){
        Collection coll=new ArrayList();
        //add()
        coll.add("AA");
        coll.add(123);//自动装箱
        coll.add(new String("性格"));
        coll.add(new Person("tom",12));
        //isEmpty()
        System.out.println(coll.isEmpty());

        //contains(Object obj)
        System.out.println(coll.contains("AA"));//true
        System.out.println(coll.contains(123));//true
        System.out.println(coll.contains(new String("性格")));//true,比的是内容equal
        System.out.println(coll.contains(new Person("tom",12)));//false,equal没有重写.重写后为true

        //containsAl(Collection coll)
        Collection coll1=new ArrayList();
        coll1.add("AA");
        coll1.add(465);
        System.out.println(coll.containsAll(coll1));//false
    }

2.3删除

(8) void clear():清空集合元素

(9) boolean remove(Object obj)︰从当前集合中删除第一个找到的与obj对象equals返回true的元素。

(10) boolean removeAl(Collection coll):从当前集合中删除所有与coll集合中相同的元素。即this = this - this ∩coll //差集

(11) boolean retainAll(Collection coll):从当前集合中删除两个集合中不同的元素,使得当前集合仅保留与coll集合中的元素相同的元素,即当前集合中仅保留两个集合的交集,即this = this ∩ coll; //交集

    public void test3(){
        Collection coll=new ArrayList();
        //add()
        coll.add("AA");
        coll.add(123);//自动装箱
        coll.add(new String("性格"));
        coll.add(new Person("tom",12));
        //clear()
//        coll.clear();
//        System.out.println(coll);//[]
//        System.out.println(coll.size());//0

        //remove
        System.out.println(coll);//[AA, 123, 性格, Person{name='tom', age=12}]
        coll.remove(new String("性格"));//删的是内容
        System.out.println(coll);//[AA, 123, Person{name='tom', age=12}]
    }

2.4其它

(12) object[] toArray():返回包含当前集合中所有元素的数组

(13) hashCode():获取集合对象的哈希值

(14) iterator():返回迭代器对象,用于集合遍历

    public void test4(){
        Collection coll=new ArrayList();
        //add()
        coll.add("AA");
        coll.add(123);//自动装箱
        coll.add(new String("性格"));
        coll.add(new Person("tom",12));
        //集合---》数组   toArray()
        Object[] array = coll.toArray();
        System.out.println(Arrays.toString(array));//[AA, 123, 性格, Person{name='tom', age=12}]
    }

2.集合与数组的相互转换:

  • 集合--->数组:toArray(
  • 数组--->集合:调用Arrays的静态方法asList(Object ... objs)
    public void test5(){
    String[] arr=new String[]{"aa","bb"};
        List<String> list = Arrays.asList(arr);
        System.out.println(list);//[aa, bb]
    }

3.向Collection中添加元素的要求:

  • 要求:元素所属的类一定要重写equals()!
  • 原因:因为Collection中的相关方法(比如: contains() / remove())在使用时,要调用元素所在类的equals()。

03-迭代器的使用与增强for循环

1.迭代器(Iterator)的作用?用来遍历集合元素的。

2.如何获取迭代器(Iterator)对象?
Iterator iterator = coll.iterator();

3.如何实现遍历(代码实现)
while(iterator.hasNext()){
System.out.println(iterator.next());//next() :①指针下移②将下移以后集合位置上的元素返回
}

    public void test6(){
        Collection coll=new ArrayList();
        coll.add("AA");
        coll.add(123);//自动装箱
        coll.add(new String("性格"));
        coll.add(new Person("tom",12));

        //获取迭代器对象
        Iterator iterator = coll.iterator();
        //方式1
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
        //方式2
//        for (int i = 0; i < coll.size(); i++) {
//            System.out.println(iterator.next());
//        }
        //方式3  常用
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

4.增强for循环(foreach循环)的使用(jdk5.0新特性)

4.1 作用

用来遍历数组、集合。

4.2格式:

for(要遍历的集合或数组元素的类型临时变量︰要遍历的集合或数组变量){
操作临时变量的输出
}

    public void test7(){
        Collection coll=new ArrayList();
        coll.add("AA");
        coll.add(123);//自动装箱
        coll.add(new String("性格"));
        coll.add(new Person("tom",12));
        for (Object o:coll) {
            System.out.println(o);
        }
    }

4.3说明:

  • 针对于集合来讲,增强for循环的底层仍然使用的是迭代器。
  • 增强for循环的执行过程中,是将集合或数组中的元素依次赋值给临时变量,注意,循环体中对临时变量的修改,可能不会导致原有集合或数组中元素的修改。

04-List接口与实现类的使用.

1.List接口中存储数据的特点:用于存储有序的、可以重复的数据。--->使用List替代数组,"动态"数组

2.List中的常用方法:

第1波:Collection中声明的15个方法。

第2波:因为List是有序的,进而就有索引,进而就会增加一些针对索引操作的方法。-插入元素

  • 'void add(int index,0bject ele)`:在index位置插入ele元素
  • boolean addAll(int index,Collection eles):从index位置开始将eles中的所有元素添加进来-获取元素
  • 0bject get(int index):获取指定index位置的元素
  • List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合-获取元素索引
  • int index0f(Object obj):返回obj在集合中首次出现的位置
  • int lastIndexOf(0bject obj):返回obj在当前集合中末次出现的位置-删除和替换元素
  • Object remove(int index):移除指定index位置的元素,并返回此元素- Object set(int index,0bject ele):设置指定index位置的元素为ele

小结:


add(Object obj)
addAll(Collection coll)


remove(0bject obj)
remove(int index)

set(int index, 0bject ele)

get(int index)

add(int index,0bject ele)
addAll(int index,Collection eles)

长度
size()

遍历

iterator() :使用迭代器进行遍历

增强for循环
一般的for循环


3. List及其实现类特点

java.util.Collection:存储一个一个的数据
l-----子接口:List:存储有序的、可重复的数据("动态"数组)

  • ArrayList:List的主要实现类﹔线程不安全的、效率高﹔底层使用Object[]数组存储
    在添加数据、查找数据时,效率较高;在插入、删除数据时,效率较低
  • LinkedList:底层使用双向链表的方式进行存储;在对集合中的数据进行频繁的删除、插入操作时,建议使用此类
    在插入、删除数据时,效率较高;在添加数据、查找数据时,效率较低;
  • Vector:List的古老实现类﹔线程安全的、效率低﹔底层使用0bject[]数组存储

案例:键盘录入学生信息,保存到集合List中。

(1)定义学生类,属性为姓名、年龄,提供必要的getter、setter方法,构造器, toString(),equals()方法。

(2)使用ArrayList集合,保存录入的多个学生对象。
(3)循环录入的方式,1:继续录入,0:结束录入。
(4)录入结束后,用foreach遍历集合。

package com.xin.kuangjia.demo02;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }


}
============
    package com.xin.kuangjia.demo02;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentList {
    public static void main(String[] args) {
        ArrayList list=new ArrayList();
        Scanner scanner = new Scanner(System.in);
        System.out.println("请录入学生的信息");
        int nextInt=1;
        while (nextInt==1) {

            System.out.println("1:继续录入,0:结束录入");
            nextInt = scanner.nextInt();
            if (nextInt==1){
                Student student1 = new Student();
                System.out.print("请输入学生姓名:");
                student1.setName(scanner.next());
                System.out.print("请输入学生年龄:");
                student1.setAge(scanner.nextInt());
                list.add(student1);
            }
        }
        scanner.close();
        System.out.println("遍历学生信息:");
        for (Object s :
                list) {
            System.out.println(s);
        }
    }
}

案例:
定义方法public static int listTest(Collection list,String s)统计集合中指定元素出现的次数
(1)创建集合,集合存放随机生成的30个小写字母
(2)用listTest统计,a、b、c、x元素的出现次数

package com.xin.kuangjia.demo02;

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

public class Day90200 {
    public static void main(String[] args) {
        ArrayList list=new ArrayList();
        Random random = new Random();
        for (int i = 0; i < 30; i++) {
            char c = (char) (random.nextInt(26) + 97);
           list.add(c+"");//将char转换为String

        }
        System.out.println(list);

        int a = listTest(list, "a");
        System.out.println("a的次数:"+a);
        int b = listTest(list, "b");
        System.out.println("b的次数:"+b);
        int c = listTest(list, "c");
        System.out.println("c的次数:"+c);
        int x = listTest(list, "x");
        System.out.println("x的次数:"+x);

    }
    public static int listTest(Collection list ,String s){
        int count=0;
        for (Object o :
                list) {
            if (s.equals(o)){//String可以比,但是char不行
                count++;
            }
        }
        return count;
    }
}

标签:01,add,System,println,coll,概述,集合,out
From: https://www.cnblogs.com/xin-zhi-suo-xiang/p/17673528.html

相关文章

  • 名人名言_20230901-
    日常学习名人名言,激励自己......
  • Java集合面试之Queue篇
    Java集合面试之Queue篇(qq.com)1、队列是什么?队列是常用数据结构之一。是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,故为先进先出(FIFO,firstinfirstout)线性表。和栈一样,队列是一种操作受限制的线性表。2、队列的分类?Qu......
  • 说说你知道哪些Java集合吧
    Java集合,主要由两大接口派生而来一个是Collection接口,主要用于存放单一元素;下面有三个主要的子接口,List、Set、Queue。List实现类主要有ArrayList、LinkedList、Vector、StackSet实现类主要是HashSet、LinkedHashSet、TreeSetQueue主要是实现类有ArrayDeque、PriorityQueue......
  • USB概述
    USB概述读《圈圈教你玩USB第二版》,笔记。USBUSB——UniversalSerialBus通用串行总线出现目的:简化个人计算机与外围设备连接,支持热插拔。特点协议速度USB1.01.5Mb/s低速/12Mb/s全速USB1.01.5Mb/s低速/12Mb/s全速USB2.01.5Mb/s低速/12Mb/s全速/......
  • ORA-01031: insufficient privileges 19c跨用户视图查询 with grant option
    问题概述某客户从11.2.0.1升级迁移到19.16版本后,应用反应部分查询功能无法使用报无权限,数据库中增加了ORA-01031:insufficientprivileges跟踪event进行分析问题复现创建三个测试用户createusertest1identifiedbyoracle123;createusertest2identifiedbyoracle123;......
  • AtCoder Beginner Contest 201 E - Xor Distances
    E-XorDistances原题链接题意:设dist(i,j)即i到j之间路径的异或和,求树上所有两点之间dist(i,j)的和思路:dist(i,j)=dist(i,1)^dist(j,1)根据异或性质相同的部分会被消掉用bfs求得dist(i,1)优化两层i,j的枚举:通过遍历每个数的每一位1的个数cnt,以及0的个数n-cnt,从而在1^0=1......
  • AtCoder Beginner Contest 201 D - Game in Momotetsu World
    D-GameinMomotetsuWorld原题链接题意有一个H×W的方格,每个方格里写着'+'或'-'有一个初始在(1,1),(也就是左上角)的棋子,Takahashi和Aoki轮流向右或向下移动(Takahashi先手)。移动到写着'+'的方格上后,进行该步移动的玩家分数+1。否则该玩家分数−1,走到右下......
  • 230901 简单模式,避免贪婪
    短线操作中,存在各种各样的模式与上涨方式.比如德赛西威的机构缓慢上涨, 星期六,中贝,金科股份,直接快速上涨.美丽生态,金盛控股,人民网的震荡上涨方式.多种上涨方式,则存在多种的买入位置与,买点与卖点.你要想把这些所有的都覆盖,显然是不可能的.比如,掌握打板,掌握半路,......
  • NOIP2012提高组初赛易错题解析
    一.3. 错误原因:忘记了解析:Intel是全球最大的CPU厂商,AMD是世界上首个研发出7纳米CPU的厂商 6.错误原因:忘记了解析:ENIAC是世界上首台计算机,属于第一代计算机,即电子管计算机 10.错误原因:选项理解错误解析:A由蝙蝠,发明雷达是正确的,B因特网的发明与蜘蛛网无关,只是形......
  • NOIP2011提高组初赛易错题解析
    一.7.错误原因:不知道解析:快速排序在理论上最低的时间复杂度为O(n),但实际最低的时间复杂度为O(nlogn) 二.1.错误原因:漏项了解析:这棵树最少有12层,但题目是问可能是几层,所以还可能是2011层 5.错误原因:漏了一种情况解析:这道题的树有两种,所以答案也有两种 ......