Java类集框架(一)

这篇具有很好参考价值的文章主要介绍了Java类集框架(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.Collection集合接口

2.List 接口 (常用子类 ArrayList ,LinkedList,Vector)

3.Set 集合 接口(常用子类 HashSet  LinkedHashSet,TreeSet)

4.集合输出(iterator , Enumeration)


1.Collection集合接口

Collection是集合中最大父接口,在接口中定义了核心的一些操作。

Collection接口定义的核心方法:

方法名 描述 方法修饰符 参数 返回值类型
add(E element) 将指定元素添加到集合中 public element: 要添加的元素 boolean
remove(Object o) 从集合中移除指定元素 public o: 要移除的元素 boolean
get(int index) 获取集合中指定位置的元素 public index: 元素的索引 E
clear() 清空集合中的所有元素 public
size() 返回集合中的元素数量 public int
toArray() 将集合转换为数组 public Object[]
iterator() 返回集合的迭代器 public Iterator<E>
contains(Object o) 检查集合是否包含指定元素 public o: 要检查的元素 boolean

2.List 接口 (常用子类 ArrayList ,LinkedList,Vector)

List实现了Collection接口,但是自己也扩充了一些方法:

List扩充的方法:

方法名 描述
get(int index) 获取列表中指定位置的元素
set(int index, E element) 用指定元素替换列表中指定位置的元素
ListIterator() 返回列表的列表迭代器
foreach(Consumer<? super E> action) 对列表中的每个元素执行指定操作

1.ArrayList 线性表

作为一个线性标其存储方式是数组模式,以下是一个ArrayList的案例代码

实现ArrayList存放字符串类型的火车

package Example1801;

import java.util.ArrayList;
import java.util.List;

public class javaDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("火车头");
        list.add("车厢1");
        list.add("车厢2");
        list.add("车厢3");
//        获取基础信息
        System.out.println("集合是否为空?"+list.isEmpty()+" 集合内容的个数"+list.size());
//        调用方法判断是否存在字符串
        System.out.println(list.contains("火车头"));
//        获取下标为0的内容
        System.out.println("下标为0的内容是"+list.get(0));
//        移除数据
        list.remove("车厢3");
//        非标准输出,了解即可,标准输出接口是Iterator
        list.forEach(str->{
            System.out.println(str);
        });
//       清空集合内的数据
        list.clear();
        System.out.println(list.isEmpty());
    }
}

Java类集框架(一),java,java,开发语言

2.LinkedList 链表

作为链表,其实现的方法与火车类似,定义一个空间(车厢)再接在火车最后一列车厢上。

案例代码:

package Example1804;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class javaDemo {
    public static void main(String[] args) {
        // 创建链表并插入数据
        List<String> linkedList = new LinkedList<String>();
        linkedList.add("火车头");
        linkedList.add("火车车厢1");
        linkedList.add("火车车厢2");
        linkedList.add("火车车厢3");
        linkedList.add("火车车尾");

        System.out.println(linkedList);
    }

}

 Java类集框架(一),java,java,开发语言

数组和链表的最大区别:

1.链表相比于数组不需要频繁的创造新的空间,但是两者的查找效率(get)并不相同,数组的时间复杂度为O(1)而链表的时间复杂度是O(n)

3.Vector

Vector作为原始的程序类由于其应用的广泛性,所以将其保存下来了

案例代码:

package Example1805;

import java.util.List;
import java.util.Vector;

public class javaDemo {
    public static void main(String[] args) {
//        泛型<包装类>
        List<Integer> all = new Vector<Integer>();
        for (int i = 1;i<=10;i++){
            all.add(i);
        }
        if (!all.isEmpty()){
            System.out.println(all);
        }
        
    }
}

Java类集框架(一),java,java,开发语言

ArrayList与Vector的区别

ArrayList与Vector首先两者虽然外部调用方法看起来一样,但是二者的源码(内部机制)并不一样,Vector的源码中操作方法中加入了synochronized同步的操作,这就意味着多线程访问二者时候,Vector就会比较安全,但是相应的Vector的效率就会比较低


3.Set 集合 接口(常用子类 HashSet  LinkedHashSet,TreeSet)

 Set与List最大的不同就是,作为一个集合,有互斥性,即不能放同样的数据,或者是同样的数据会被自动覆盖掉,比如做一个统计,统计某个学校学生最喜欢的科目,100个学生但是不可能有100个科目,所以如果有学生是喜欢同样的科目就会自动覆盖。

1.Set的子类HashSet(散列集合)

注意该集合的特点是无序性,以下案例代码就可以看得出其中特性

案例代码:

package Example1806;

import java.util.HashSet;
import java.util.Set;

public class javaDemo {
    public static void main(String[] args) {
        Set<String> all = new HashSet<String>();
        all.add("火车头");
        all.add("车厢1");
//        重复数据
        all.add("车尾");
        all.add("车尾");
        System.out.println(all);
    }
}

Java类集框架(一),java,java,开发语言

 如果想要让HashSet要按照我们顺序输入实现顺序的话就需要用到另一个兄弟类LinkedHashSet以保证其输入的有序性

2.LinkedHashSet

案例代码:

package Example1807;

import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Set;

public class javaDemo {
    public static void main(String[] args) {
        Set<String> all = new LinkedHashSet<String>();
        all.add("火车头");
        for (int i =1;i<=10;i++){
            all.add("火车车厢"+i);
        }
        all.add("火车车尾");
        if (!all.isEmpty()){
            System.out.println(all);
        }
        all.clear();
    }
}

Java类集框架(一),java,java,开发语言

3.有序集合 TreeSet

有序集合可能会跟刚才的LinkedHashSet联想在一起,实际上并不一样,其中所谓的有序指的是元素的有序性,比如集合中传入一个班级一次考试的成绩,有很大可能并不是按照考试的成绩顺序输入,那么想要实现集合内部自动排好成绩的高低。此时就需要用到TreeSet(有序集合)

案例代码1:

package Example1808;

import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class javaDemo {
    public static void main(String[] args) {

        System.out.println("欢迎使用成绩等级系统");
        Set<Integer> all = new TreeSet<Integer>();
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入需要添加的成绩(输入0时候退出系统)");
        while (true){
            if (scanner.hasNextInt()){
                int temp = scanner.nextInt();
//                当输入的成绩位0时候退出系统
                if (temp == 0){
                    break;
                }
                all.add(temp);
                System.out.println("加入成绩成功");
            }else {
                System.out.println("您输入的成绩有问题,请重新输入");
            }
        }
        System.out.println(all);
    }
}

 Java类集框架(一),java,java,开发语言

该代码实现了输出一个班同学所有人考试得到的成绩, 然后从低到高输出大家取到过的成绩

4.重复元素消除

问题引出:看如下代码:

package Example1809;

import java.util.HashSet;
import java.util.Set;

class Member{
    private String name;
    private int age;
    private int id;
    Member(String name,int age,int id){
        this.age = age;
        this.name = name;
        this.id = id;
    }
    @Override
    public String toString() {
        return "Member{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", id=" + id +
                '}';
    }
}
public class javaDemo {
    public static void main(String[] args) {
        Set<Member> all = new HashSet<Member>();
//        重复对象
        all.add(new Member("赵五",20,001));
        all.add(new Member("赵五",20,001));
        System.out.println(all);
    }
}

Java类集框架(一),java,java,开发语言

问:按理来说,add的两个对象其实都是同一个人,如果定义集合Set就应该剔除重复对象,为什么没有剔除呢?

        虽然添加了两个具有相同数据的Member对象,但它们在内存中的地址不同,因此HashSet无法识别它们是相同的对象,也就无法将其视为重复元素进行删除。

        要使HashSet正确识别重复的Member对象,需要在Member类中重写hashCode()和equals()方法,以便根据实际的业务逻辑来判断对象是否重复。例如,可以根据name、age和id属性来判断两个Member对象是否相同。重写这两个方法后,HashSet就能正确地剔除重复对象。

 重复元素消除实现案例代码;

package Example1809;

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

class Member{
    private String name;
    private int age;
    private int id;
    Member(String name,int age,int id){
        this.age = age;
        this.name = name;
        this.id = id;
    }

    @Override
    public boolean equals(Object o) {
//        如果存放的内存地址一样。那么自然就是一样的
        if (this == o){
            return true;
        };
//        检查类型是否相同
        if (o instanceof Member){
            Member other = (Member) o;
//            判断所有值是否相同
            return Objects.equals(this.name,other.name)&&this.age == other.age&&this.id == other.id;
        }
        return false;
    }

    @Override
    public int hashCode() {
//        根据name,age,id计算哈希值
        return Objects.hash(name, age, id);
    }

    @Override
    public String toString() {
        return "Member{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", id=" + id +
                '}';
    }
}
public class javaDemo {
    public static void main(String[] args) {
        Set<Member> all = new HashSet<Member>();
//        重复对象
        all.add(new Member("赵五",20,001));
        all.add(new Member("赵五",20,001));
        System.out.println(all);
    }
}

Java类集框架(一),java,java,开发语言

可以看到同样的对象消失了,这样就算实现了重复元素的消除


4.集合输出(迭代器Iterator , Enumeration )

1.迭代器iterator(集合的标准输出)

在前面的Collection中定义的方法

iterator() 返回集合的迭代器 public Iterator<E>

这一段说明实现集合都可以通过迭代器iterator输出,其创建的实例方法流程是

Iterator iterator = 某个集合.iterator

Iterator接口的常用方法

方法名 描述 方法修饰符 参数 返回类型
hasNext() 检查迭代器是否还有下一个元素。如果有,则返回true;否则返回false。 public boolean
next() 返回迭代器的下一个元素,并将迭代器的位置指向下一个元素。 public E
remove() 从迭代器所在的集合中移除迭代器返回的最后一个元素(可选操作)。 public void

案例代码;

package Example1803;

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

class Person{
    private String name;
    private int age;
    Person(String name,int age){
        this.age =age;
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public String getName() {
        return name;
    }
}
public class javaDemo {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<Person>();
        personList.add(new Person("黄小龙",87));
        personList.add(new Person("陈非凡",20));
        personList.add(new Person("陈俊",20));
//        直接输出会输出类的地址
        System.out.println(personList);
//        通过迭代器遍历输出对象的名称和age
        Iterator<Person> iterator = personList.iterator();
        while (iterator.hasNext()){
//            需要有对象接收不能直接输出iterator.next.getName()+iterator.next.getAge
//            这样会出现错误,因为iterator接收数据后立刻就往下走
            Person person = iterator.next();
            System.out.println(person.getName()+"的年龄是"+person.getAge());
        }
    }
}

 Java类集框架(一),java,java,开发语言

 熟悉集合类型与Iterator的实现

package Example1810;

import java.util.*;

public class javaDemo {
    public static void main(String[] args) {
//        链表
        List<String> list1 = new LinkedList<String>();
        list1.add("和平号高铁车头");
        list1.add("和平号高铁车厢");
        list1.add("和平号高铁车尾");
        Iterator<String> iterator1 = list1.iterator();
        while (iterator1.hasNext()){
            System.out.println(iterator1.next());
        }
//        散列集合
        Set<String> set1 = new HashSet<String>();
        set1.add("绿皮火车车头");
        set1.add("绿皮火车车厢");
        set1.add("绿皮火车车尾");
        Iterator<String> iterator2 = set1.iterator();
        while (iterator2.hasNext()){
            System.out.println(iterator2.next());
        }
//        有序集合
        Set<Integer> set2 = new TreeSet<Integer>();
        set2.add(1);
        set2.add(2);
        set2.add(3);
        Iterator<Integer> iterator3 = set2.iterator();
        while (iterator3.hasNext()){
            System.out.println(iterator3.next());
        }
    }
}

Java类集框架(一),java,java,开发语言

2.Enumeration

Enumeration该接口与Vector都是原始接口都是在jdk很早前就定义了,该接口主要是用于对Vector的数据输出,在JDK1.5后对其进使用了泛型重新修改

该接口有两个比较常用的方法:

方法名 描述
hasMoreElements() 检查枚举对象是否有更多的元素可供迭代。如果有,则返回true;否则返回false。
nextElement() 返回枚举对象的下一个元素,并将枚举对象的位置指向下一个元素。如果没有更多元素,则会抛出NoSuchElementException异常

案例代码:

package Example1811;

import java.util.Enumeration;
import java.util.Vector;

public class javaDemo {
    public static void main(String[] args) {
        Vector<String> vector = new Vector<>();
        vector.add("测试1");
        vector.add("测试2");
        vector.add("测试3");
//        通过vector的elements实例化
        Enumeration<String> enumeration = vector.elements();
        while (enumeration.hasMoreElements()){
            System.out.println(enumeration.nextElement());
        }
    }
}

Java类集框架(一),java,java,开发语言


解决传统类集框架的弊端

JUC并发集合_Alphamilk的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-623672.html

到了这里,关于Java类集框架(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • JAVA开发(Spring框架详解)

    JAVA开发(Spring框架详解)

    javaweb项目几乎已经离不开spring框架了,spring 是一个典型的分层架构框架,它包含一系列的功能并被分为多个功能模块,springboot对spring框架又做了一层封装,以至于很多人对原来的spring框架越来越不了解。         要谈Spring的历史,就要先谈J2EE。J2EE应用程序的广泛实现是

    2023年04月20日
    浏览(5)
  • 「Java」《Java集合框架详解:掌握常用集合类,提升开发效率》

    Java 集合框架是 Java 编程中不可或缺的一部分。它提供了一组强大的数据结构和算法,用于存储、操作和处理对象数据。本文将深入探讨 Java 集合框架的核心概念,介绍常用的集合接口和实现类,并提供实际应用示例,帮助读者更好地理解和应用集合框架,提升开发效率。

    2024年02月11日
    浏览(9)
  • java常见面试题:如何使用Java进行JPA框架开发?

    JPA(Java Persistence API)是一个Java平台的标准持久化API,它提供了一种标准的查询语言和API来将Java对象与关系数据库进行映射。 以下是使用Java进行JPA框架开发的详细步骤: 添加JPA依赖 首先,你需要在项目中添加JPA的依赖。如果你使用的是Maven项目,可以在pom.xml文件中添加以

    2024年01月18日
    浏览(7)
  • Java开发 - MybatisPlus框架初体验

    目录 前言 MyBatisPlus 什么是MyBatisPlus 特性 Spring Boot整合MyBatisPlus 创建项目

    2023年04月10日
    浏览(7)
  • Java Spring Boot 开发框架

    Spring Boot是一种基于Java编程语言的开发框架,它的目标是简化Java应用程序的开发过程。Spring Boot提供了一种快速、易于使用的方式来创建独立的、生产级别的Java应用程序。本文将介绍Spring Boot的特性、优势以及如何使用它来开发高效、可靠的应用程序。 Spring Boot是由Pivotal团队

    2024年02月08日
    浏览(9)
  • Java web 开发常用的框架详解

    Java Web开发是一项庞大而复杂的任务,有许多框架旨在简化和加速这个过程。这些框架提供了一套工具和规范,帮助开发者更高效地构建强大、可扩展和维护的Web应用程序。在这篇文章中,详细讲解一些Java Web开发中常用的框架,包括Spring、Hibernate、Struts、Servlet、以及一些与

    2024年03月10日
    浏览(8)
  • Java后端开发面试题——框架篇

    Java后端开发面试题——框架篇

    Spring框架中的bean是单例的吗?Spring框架中的单例bean是线程安全的吗? singleton : bean在每个Spring IOC容器中只有一个实例。 prototype:一个bean的定义可以有多个实例。 Spring bean并没有可变的状态(比如Service类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的 如果在bean中定

    2024年02月12日
    浏览(9)
  • Java开发框架和中间件面试题(8)

    Java开发框架和中间件面试题(8)

    目录 82.Mybatis一级缓存,二级缓存? 83.Mybatis如何防止SQL注入? 84.mybatis中resultType和resultMap有什么区别? 85.如何在SpringBoot中禁用Actuator断点安全性? 86.什么是SpringBoot?SpringBoot有哪些优点? 87.SpringBoot中的监视器是什么? 88.什么是yaml文件? 89.如何使用SpringBoot实现异常处理?

    2024年02月03日
    浏览(6)
  • HarmonyOS学习路之开发篇—Java UI框架(动画开发)

    HarmonyOS学习路之开发篇—Java UI框架(动画开发)

    动画是组件的基础特性之一,精心设计的动画使UI变化更直观,有助于改进应用程序的外观并改善用户体验。Java UI框架提供了帧动画、数值动画和属性动画,并提供了将多个动画同时操作的动画集合。 帧动画是利用视觉暂留现象,将一系列静止的图片按序播放,给用户产生动

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包