首页 > 编程语言 >七、Java集合

七、Java集合

时间:2023-11-08 14:33:04浏览次数:31  
标签:元素 Java Object boolean 键值 key 集合

一、集合概述

集合的特点如下:

  1. 动态大小:集合可以根据需要动态调整大小,不像数组需要提前指定大小。

  2. 灵活性:集合提供了各种不同类型的数据结构和容器,例如列表、集、映射、队列等,以满足不同的存储和操作需求。

  3. 高效性:Java集合框架中的实现类经过优化,提供高效的插入、删除和查找操作。例如,ArrayList在随机访问元素时具有较高的性能,而LinkedList在插入和删除操作时更为高效。

  4. 泛型支持:集合框架引入了泛型,可以在编译期间进行类型检查,提高代码的安全性和可读性。

  5. 统一的接口:集合框架定义了一组统一的接口和规范,使得不同的集合实现类之间可以很方便地切换和替换,提高了代码的灵活性和可维护性。

  6. 提供丰富的操作方法:集合框架提供了丰富的方法和算法来对集合进行操作和处理,例如排序、过滤、映射等,方便开发者进行数据处理和转换

Java中的集合分为collection接口和Map接口

其中collection接口又分为:list与set两个接口

 

二、Collection

Collection接口中的抽象方法:

    boolean add(Object e) 默认是在集合的末尾处添加元素

    boolean remove(Object o) 移除某一个元素

    void clear() 清空集合

    boolean contains(Object o) 判断集合中是否存在某个元素

    boolean isEmpty() 判断是否为空

    int size() 获取集合元素的个数

Collection中的成员方法:

     boolean addAll(Collection c) 将一个集合的所有元素添加到当前集合中 

     boolean removeAll(Collection c) 将当前集合中与给定集合相同的元素全部移除

     boolean containsAll(Collection c) 检查当前集合是否包含给定集合中的所有元素

     boolean retainAll(Collection c) 保留当前集合中与给定集合相同的元素

 

Collection集合的遍历:

      1、Object[] toArray()  将集合变成数组

      2、Iterator iterator()  迭代器遍历,是Collection集合的特有遍历方法

      3、增强for循环  只适用于Collection集合和数组

package com.shujia.day10;

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

/*
    List集合特有的迭代器:
        ListIterator listIterator()
 */
public class ListDemo3 {
    public static void main(String[] args) {
        //1、创建集合对象
        List l1 = new ArrayList();
        l1.add("hello");
        l1.add("world");
        l1.add("java");
        l1.add("hadoop");
        System.out.println("l1: " + l1);
        System.out.println("-------------------------------");


        //获取listIterator
        ListIterator listIterator = l1.listIterator(); //ListIterator listIterator =  new ListItr()
        while (listIterator.hasNext()){
            Object o = listIterator.next();
            System.out.println(o);
        }

        System.out.println("--------------------------------------");
        //判断前一个位置上有没有元素,如果想要正向遍历两次的话,得先倒着遍历一次,很麻烦,所以这个需求实现基本不会去做
        while (listIterator.hasPrevious()){
            //向前移动一格游标,取出前一个位置上的元素
            System.out.println(listIterator.previous());
        }
    }

 

 

1、list(元素有序且可以重复)

因为List集合中多了一个索引的概念,那么就可以根据索引扩展很多特有的方法

    void add(int index,Object element) 根据索引位置添加元素

    Object remove(int index) 根据索引位置删除元素

    Object get(int index) 获取索引位置上对应的元素

    Object set(int index,Object element) 修改索引位置上的元素值

    ListIterator listIterator() 返回一个ListIterator对象,该对象用于遍历ArrayList中的元素。

 

实现子类:ArrayList,vector,LinkedList

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

          如果要去重的话,重写equals方法

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

     即使线程安全,以后也不用(之后会将ArrayList变成线程安全的来使用)

成员方法: public void addElement(Object obj) 完全可以使用add()方法代替 public Object elementAt(int index) 根据索引获取元素 完全可以使用get()方法代替 public Enumeration elements() 可以使用迭代器代替

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

      特有的成员方法:

        public void addFirst(E e)及addLast(E e) 添加元素 效果和add()是一样

        public E getFirst()及getLast() 获取元素

        public E removeFirst()及public E removeLast() 删除元素

 2、Set(元素无序且唯一)

实现子类:HashSet,TreeSet

①HashSet:底层数据结构是哈希表,保证了元素的唯一

      如果要去重的话,重写hashCode()和equals()

子类:LinkedHashSet 底层数据结构是哈希表和双链表,哈希表保证了元素的唯一性,双链表保证了元素的有序

②TreeSet:底层数据结构是红黑树,在保证元素唯一的同时,还可以对元素进行排序

      TreeSet的add方法实际上底层调用的是TreeMap的put方法

排序方法:  

      自然排序:元素类型要实现Comparable接口,并实现compareTo方法;当TreeSet是无参构造方法创建的时候,默认走的是自然排序

      比较器排序:在创建对象的时候,传入一个实现了Comparator接口的对象,实现compare方法

 

 

三、Map

概述:元素是有key-value键值对组成的 ;Map本身是一个接口,我们需要借助一个实现子类去创建对象,才能调用方法


元素特点:

    1、对于每个元素本身而言,一个键只能对应一个值
    2、对于整体而言,键不允许重复,值却可以

Map接口中的成员方法: 
V put(K key,V value) 向集合中添加一组键值对 返回键对应的历史值
V remove(Object key) 根据键删除一个键值对,返回被删除的value值
void clear() 清空集合中所有键值对
boolean containsKey(Object key) 判断是否包含某个键
boolean containsValue(Object value) 判断是否包含某个值
boolean isEmpty() 是否为空
int size() 获取元素(键值对)的个数

Map集合的遍历方式:
1、挨个遍历每个键值对,根据键获取值
        // 先获取所有的键keySet(),get()根据键获取值
       Set<Integer> keySet = map.keySet();
       for (Integer key : keySet) {
           //根据key获取值
            String value = map.get(key);
        System.out.println(key + ":" + value);
        }

 


2、一次性获取所有的键,遍历所有的键,得到每一个值
 //一次性获取所有的键值对,然后遍历每个键值对得到键和值
        // entrySet() 一次性获取所有的键值对
        Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
        for (Map.Entry<Integer, String> entry : entrySet) {
            Integer key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + ":" + value);


实现子类:HashMap,TreeMap

①HashMap :底层数据结构是哈希表,保证了key的唯一

        HashMap中的去重是针对key来说的,要求key的类型要重写hashCode方法和equals方法

HashMap和Hashtable的区别:

      HashMap是线程不安全的,而Hashtable是线程安全的

      HashMap的key和value允许为null值,而Hashtable不允许

子类:

    LinkedHashMap:底层数据结构是哈希表和双链表,哈希表保证了key的唯一性,双链表保证了key的有序

②TreeMap:底层数据结构是红黑树,可以进行自然排序和比较器排序,排序是针对于key来排序。

 

 

 

 

            

 

 

标签:元素,Java,Object,boolean,键值,key,集合
From: https://www.cnblogs.com/SIKE231310/p/17816987.html

相关文章

  • JAVA遍历list是对其操作
    @Testpublicvoidremove(){ArrayList<String>list=newArrayList<>();list.add("php");list.add("java");list.add("php");list.add("php");list.add(......
  • java lambda表达式、匿名类和接口
    从匿名类重写已有类的方法开始这段代码,在AnonymousDemo内部创建了一个Polygon类的p1对象但这个Polygon类内部的方法被重写了,是一个匿名类,内部类和外部类重名,重写了内部的方法这个机制应该理解为继承,内部的Polygon继承了外部的Polygon类,重写了display方法,Polygon的其他没被重写......
  • 【Java SE】String.format格式化
    String.format1、字符串左对齐,不足10位的右侧补空格:[123      ]String.format("%-10s","123");2、字符串右对齐,不足10位的左侧补空格:[      123]String.format("%10s","123");3、整数格式化10位,不足左侧补0:[0000000123]String.format("%010d",123) ......
  • Java根据日期计算星期几的四种方法
    在我们日常业务代码中,经常要用到星期几,下面这篇文章主要给大家介绍了关于Java根据日期计算星期几的四种方法,文中通过代码将每种实现的非常详细,需要的朋友可以参考下方法一:根据基姆拉尔森日期公式publicstaticvoidmain(Stringargs[]){Scannerscanner=new......
  • Java的设计模式之工厂模式
    在软件设计中,我们经常遇到需要创建不同类型对象的情况,但是如果直接在代码中实例化对象,会使代码紧密耦合在一起,难以维护和拓展,此外,如果对象的创建方式需要变化,那么就需要再整个代码中进行大量的修改。工厂模式旨在解决这个问题。工厂模式提供了一个创建对象的接口,但是将具体的对象创......
  • java一体化医疗信息管理系统源码:云HIS、云病历、云LIS
    基于云计算技术的B/S架构的HIS系统,为医疗机构提供标准化的、信息化的、可共享的医疗信息管理系统,实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。系统利用云计算平台的技术优势,建立统一的云HIS、云病历、云LIS,有效实现实现协同门诊、住院、药房药库管理、双向转诊转......
  • Java打包镜像部署
    Java打包镜像DockerfileFROMopenjdk:17WORKDIR/opt/data-hubCOPYtarget/data-hub.jar./EXPOSE9843ENTRYPOINT["java","-jar","data-hub.jar"]构建镜像命令dockerbuild-toldweipro/data-hub:latest.运行镜像dockerrun-p9843:9843-......
  • 创建一个 java agent jar 包
    pom.xml文件。(javaagent和main方法的jar可以分开成两个项目,单独打包jar)<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • javascript 手动实现 bind,call,apply
     js手动实现call方法Function.prototype.myCall=function(content,...args){letmyfn=Symbol()content=content||globalThis//console.log(content)content[myfn]=this//console.log(content)constresu......
  • Java面试题(高频、有答案,全网最强)
    这是一套全网最强的Java面试题,吊打网上所有Java面试题。此套面试题的威力:看过这套题的朋友、同事、粉丝参加了面试后说,他们面试被问到的问题大部分(85%以上)都在这套题里,面试通过率高达90%。这是粉丝的真实评价(聊天截图):有人说这套题题目太多了,我说:着急的可以看频率为两颗星及以上的题......