IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java | (十二)List集合,Set,ArrayList,Vector,HashSet,treeSet -> 正文阅读

[Java知识库]java | (十二)List集合,Set,ArrayList,Vector,HashSet,treeSet

List集合接口

List继承自Collection——Iterable,Iterable接口循环迭代方式访问集合中的数据元素,定义了唯一一个返回指向集合的Iterator 的迭代器,它通过foreach方式处理集合中的元素,任何实现类都可以获取指向集合的迭代来实现对集合的遍历。
List继承父类并提供更多方法,如定义索引来处理集合元素方法。

ArrayList集合类

ArrayList集合类是List接口的大小可变数组的实现,实现了所有可选列表的操作,并包括null在内的所有元素,除了实现List接口的内容,还提供了处理内部储存数组大小的方法,ArrayList访问查找元素快,删除、插入随机操作比较慢,企业开发常用。
常用方法展示:

package day16Test;

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


public class day16Main {
    public static void main(String[] args) {
        List stus = new ArrayList();
        for(int i =0;i < 3;i++){
            //添加集合元素
            stus.add(new Student(i,i,(int)(Math.random()*10 + 10)));
        }

        //遍历集合
        //使用for
        for(int i = 0;i < stus.size();i++){//stus.size()表示集合的长度
            Object obj = stus.get(i);//集合中的元素原本就是Object类型的
            Student s = (Student)obj;//强制类型转换,使其能用Student中的自定义show()方法
            System.out.println(s.show());

        }
        System.out.println("===================================");
        //使用foreach
        for(Object obj:stus){
            Student s = (Student)obj;//强制类型转换,使其能用Student中的自定义show()方法
            System.out.println(s.show());
        }
        System.out.println("===============================");

        //使用迭代器来遍历
        Iterator iterator = stus.iterator();
        while(iterator.hasNext()){//如果有下一个元素
            Object obj = iterator.next();//获取元素
            Student s = (Student)obj;
            System.out.println(s.show());
        }


        //清空集合中的所有元素
        stus.clear();
        System.out.println(stus.size());// 0
        System.out.println(stus.isEmpty());//判断是否是空的  true
    }


}

class Student{
    int name;
    int id;
    int age;

    public Student() {
    }

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


    public String show() {
        return "Student{" +
                "name=" + name +
                ", id=" + id +
                ", age=" + age +
                '}';
    }
}

Vector集合

Vector也叫项量集合,与ArrayList类似是可变数组,Vector是线程同步的,在多线程中通常使用Vector处理被多个线程并发访问的数据。
Vector增加了pubic Enumeration elements方法,此方法返回Enumeration枚举接口,可使用此接口对集合的变量操作

package day16Test;

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

public class day16Main2 {
    public static void main(String[] args) {
        Vector teacher = new Vector();
        for(int i =0;i < 3;i++){
            //添加集合元素
            teacher.add(new Teacher(i,i,(int)(Math.random()*10 + 10)));
        }
        System.out.println(teacher.isEmpty());//false
        Enumeration enu = teacher.elements();
        while(enu.hasMoreElements()){
            Object obj = enu.nextElement();
            Teacher t = (Teacher)obj;
            System.out.println(t.show());
        }

        Teacher t1 = new Teacher(18,2344,56);
        teacher.add(t1);
        if (teacher.contains(t1)) {//查看是否包含某个元素
            teacher.remove(t1);//删除t1
        }
        System.out.println("=========================分割线===========================");
        for(Object obj:teacher){
            Teacher tTemp = (Teacher)obj;
            System.out.println(tTemp.show());
        }
    }
}

class Teacher{
    int name;
    int id;
    int age;

    public Teacher() {
    }

    public Teacher(int name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }

    public String show() {
        return "Teacher {" +
                "name=" + name +
                ", id=" + id +
                ", age=" + age +
                '}';
    }
}

结果
在这里插入图片描述

set集合接口、Hashset

set接口也是继承Collection-Iterable,有Iterator迭代器
Set接口只能储存不相等的数据,其中的元素不带有任何索引

常用方法
boolean add(Object obj)
void clear()
boolean contain(Object obj)
Iterator <E> iterator()
boolean remove(Object obj)
int size()
boolean isEmply()
Objcect[] toArray()//转成Object数组储存

HashSet实现
此类实现Set接口,由哈希表(实际是HashMap)支持,它不保证迭代顺序,也不保证迭代顺序保持不变,允许用null元素。
HashSet实现不是同步的,多个线程访问一个HashSet,其中一个线程修改了set,那么它必须保持外部同步

package day16Test;

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

public class day16Main3 {
    public static void main(String[] args) {
        Set mySet = new HashSet();//默认初始容量16
        Worker worker1 = new Worker(1, 233, 12);
        Worker worker2 = new Worker(2, 198, 78);
        Worker worker3 = new Worker(3, 783, 90);
        mySet.add(worker1);
        mySet.add(worker2);
        mySet.add(worker3);

        Iterator iterator = mySet.iterator();
//        for(Object obj:mySet){
//            Worker w = (Worker)obj;
//            System.out.println(w.show());
//
//        }
        while(iterator.hasNext()){
            Object obj = iterator.next();
            Worker w = (Worker)obj;
            System.out.println(w.show());//顺序与创建的时候不一定相同
        }

        System.out.println("将HashSet的数据用obj数组装起来");
        Object[] objArray = mySet.toArray();//转成一个Object[]数组
        for(Object obj:objArray){
            Worker w = (Worker)obj;
            System.out.println(w.show());
        }

    }
}

class Worker {
    int name;
    int id;
    int age;

    public Worker() {
    }

    public Worker(int name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }

    public String show() {
        return "Worker {" +
                "name=" + name +
                ", id=" + id +
                ", age=" + age +
                '}';
    }
}

结果:
在这里插入图片描述
treeSet实现
基于TreeMap的NavigableSet实现并实现了SortedSet排序接口,使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序。此实现不是同步的,当多个线程对其进行操作时,有单个线程修改了这个set,需要外部同步。要排序,效率比HashSet低。

package day16Test;

import java.util.Iterator;
import java.util.TreeSet;

public class day16Main4 {
    public static void main(String[] args) {
        TreeSet tree = new TreeSet();//创建一个采用默认树形自然排序的Set集合对象
        tree.add(new Integer(100));
        tree.add(new Integer(94));
        tree.add(new Integer(45));
        tree.add(new Integer(998));

        Iterator iterator = tree.iterator();
        while (iterator.hasNext()){
            Integer integerTemp = (Integer)(iterator.next());
            System.out.println(integerTemp);

        }

        System.out.println("创建倒序的迭代器");
        //倒序迭代器
        Iterator itReverse = tree.descendingIterator();
        while (itReverse.hasNext()){
            Integer integerTemp = (Integer)(itReverse.next());
            System.out.println(integerTemp);

        }

    }
}

结果:
在这里插入图片描述

TreeSet自定义排序方法

package day16Test;

import java.util.Comparator;
import java.util.TreeSet;

public class day16Main4 {
    public static void main(String[] args) {
        TreeSet tree = new TreeSet(new PlaneSort());//将自定义的PlaneSort加入到这里,可以实现排序
        tree.add(new Plane(12, 45));
        tree.add(new Plane(20, 56));
        tree.add(new Plane(2, 99));
        tree.add(new Plane(1, 57));
        tree.add(new Plane(89, 8998));

        for (Object obj : tree) {
            System.out.println(((Plane) obj).toString());
        }

        System.out.println("首个为:" + tree.first().toString());//得到第一个
        System.out.println("最后一个为:" + tree.last().toString());//得到最后一个

    }
}

class Plane{
    int id;
    int age;
    public Plane(int id, int age) {
        this.id = id;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Plane{" +
                "id=" + id +
                ", age=" + age +
                '}';
    }
}

class PlaneSort implements Comparator{//实现Comparator接口
    //实现age从大到小排列
    @Override
    public int compare(Object o1, Object o2) {
        Plane p1 = (Plane)o1;
        Plane p2 = (Plane)o2;
        System.out.println("调用此方法");
        //从大到小排
        if(p1.age > p2.age){
            return -1;
        }else if(p1.age < p2.age){
            return 1;
        }
        return 0;
    }
}

结果:
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:22:10  更:2021-08-01 14:23:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 6:09:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码