文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java中的集合

2023-09-04 05:48

关注

Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。

Collection 接口-定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。
Set 中的数据对象没有顺序且不可以重复。

List中的数据对象有顺序且可以重复。

 List继承了Collection接口,有三个实现的类。
- ArrayList
数组列表,数据采用数组方式存储。
-LinkedList
链表
-Vector
数组列表,添加同步锁,线程安全的

public class VectorDemo {    public static void main(String[] args) {        Vector vector=new Vector();        vector.add("a");        vector.add("a");        vector.add("a");        vector.add("a");        vector.add("a");        System.out.println(vector);    }}

ArrayList实现了长度可变的数组,在内存中分配连续的空间
遍历元素和随机访问元素的效率比较高。

LinkedList采用链表存储方式插入、删除元素时效率比较高

ArrayList的常用方法
add(int index, E element)
get(int index)
indexOf(Object o)
lastIndexOf(Object o)
remove(int index)    删除并返回指定位置元素
removeRange (int fromIndex, int toIndex) 删除指定区间的元素(子类继承使用)
set(int index, E element)

 ArrayList arrayList=new ArrayList();        arrayList.add(100);        arrayList.add(1,10);        arrayList.add(20);        arrayList.add(20);        arrayList.add(20);        arrayList.add(20);        arrayList.add(20);        arrayList.add(20);        arrayList.add(20);        arrayList.add(20);        //arrayList.clear();        System.out.println(arrayList.contains(20));        System.out.println(arrayList.isEmpty());        System.out.println(arrayList.get(0));        System.out.println(arrayList.remove(1));//删除        System.out.println(arrayList.remove((Object)100));//删除某个值        Object [] array=arrayList.toArray();        System.out.println(Arrays.toString(array));//转数组        System.out.println(arrayList);

LinkedList的常用方法
add(int index,Object element)
addFirist(Object element)
addLast(Object element)
get(int index)
removeFirst()
removeLast()
remove(int index)
getFirst()
getLast()

LinkedList linklist=new LinkedList();        linklist.add("a");        linklist.add("a");        linklist.add("a");        linklist.add("a");        linklist.add("a");        //linklist.clear();        linklist.addFirst("e");        linklist.addLast("e");        //peek 检索不删除        //poll 检索并删除        System.out.println(linklist.getFirst());        System.out.println(linklist.pollLast());        System.out.println(linklist.removeFirst());        System.out.println(linklist.indexOf("a"));        System.out.println(linklist.set(0,"s"));        System.out.println(linklist.size());        System.out.println(linklist);

List接口集合迭代

● for循环遍历
● 增强for循环的遍历
● 迭代器遍历(Iterator)

ArrayList list = new ArrayList<>();        list.add("a");        list.add("a");        list.add("b");        list.add("c");        list.add("d");                     //迭代器iterator(        Iterator iterator = list.iterator();        while (iterator.hasNext()) {            String s = iterator.next();            if (s.equals("a")) {                iterator.remove();            }        }        System.out.println(list);

● Set接口继承了Collection接口。
Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的
● Set接口有两个实现类


● HashSet
HashSet类中的元素不能重复,即彼此调用equals方法比较,都返回false。
底层数据结构是哈希表+链表
哈希表依赖于哈希值存储

public class HashSetDemo1 {    public static void main(String[] args) {        HashSet hashSet=new HashSet<>();          hashSet.add("a");          hashSet.add("白色");          int a="红色".hashCode();        System.out.println(a);          hashSet.add("黑色");        int a1="种地".hashCode();        System.out.println(a1);          hashSet.add("c");          hashSet.add("d");        System.out.println(hashSet);    }}
public class HashSetDemo {    public static void main(String[] args) {        HashSet hashSet=new HashSet<>();        Car car1= new Car("宝马1",101);        Car car5= new Car("宝马1",101);        Car car2= new Car("宝马2",102);        Car car3= new Car("宝马3",103);        Car car4= new Car("宝马4",104);        //在Car类中重写了hashcode方法,先对hash值进行比较,在对内容进行比较        hashSet.add(car1);        hashSet.add(car2);        hashSet.add(car3);        hashSet.add(car4);        hashSet.add(car5);        System.out.println(hashSet);    }


● TreeSet
可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口。
TreeSet底层数据结构是二叉树(红黑树是一种自平衡的二叉树)。

public class TreeSetDemo {    public static void main(String[] args) {        TreeSet treeSet=new TreeSet<>();        Car car1= new Car("宝马1",101);        Car car5= new Car("宝马1",101);        Car car2= new Car("宝马2",102);        Car car3= new Car("宝马3",103);        Car car4= new Car("宝马4",104);        treeSet.add(car1);        treeSet.add(car3);        treeSet.add(car5);        treeSet.add(car2);        treeSet.add(car4);        System.out.println(treeSet);    }

遍历方式
增强for循环
迭代器遍历

  ArrayList list = new ArrayList<>();        list.add("a");        list.add("b");        list.add("c");        list.add("d");       ListIterator listIterator=list.listIterator();       while(listIterator.hasNext()){           String s=listIterator.next();           System.out.println(s);       }      ListIterator listIterator1=list.listIterator(list.size());       while(listIterator.hasPrevious()){           String s=listIterator.previous();           System.out.println(s);       }

上文中用到的Car类中重写了一系列方法。

package com.ffyc.collection;public class Car  implements Comparable {    String name;    int num;    public int compareTo(Car o) {        return o.num-this.num;    }    public Car(String name, int num) {        this.name = name;        this.num = num;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        Car car = (Car) o;        if (num != car.num) return false;        return name != null ? name.equals(car.name) : car.name == null;    }    @Override    public int hashCode() {        int result = name != null ? name.hashCode() : 0;        result = 31 * result + num;        return result;    }    @Override    public String toString() {        return "Car{" +                "name='" + name + '\'' +                ", num=" + num +                '}';    }}

来源地址:https://blog.csdn.net/weixin_64189867/article/details/131133473

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯