概念
目前存储数据的方式有哪些
数组;
基于数组模拟的容器类;
基于链表结构的容器类;
在Java中已经设计好了一些类和接口,和我们之前模拟的容器类功能一样。像这样的类和接口,在Java中已经写好了,我们叫做集合
List和Set的区别
List和Set的区别
相同点:都继承了Collection接口,都是Java中的集合,都可以存放任意类型任意多个元素
不同点:
List:有序可重复
ArrayList和LinkedList
Set:无序不可重复
HashSet:去重是通过hashCode()和equals()共同决定
TreeSet:去重是通过自然排序(实现Comparable接口)或者定制排序(创建对象时传入的比较器)来实现
List集合
ArrryaList(基于数组)
底层是由数组实现
ArrayList基于数组的容器类实现
调用容器类方法增删改查数据
Demo
1 | package com.ifueen.classtest._01ArrayList; |
LinkedList(基于链表)
基于链表结构的容器类实现
LinkedList 属于java.util包下面,也实现Iterable接口,说明可以使用迭代器遍历;
Demo
1 | package com.ifueen.classtest._02LinkedList; |
面试题:ArrayList和LinkedList区别
两者都是实现List接口,都可以存放任意多个任意类型的数据
ArrayList底层是由数组来实现,在数据量多的时候,查询起来较快,但是新增的时候需要不停创建新的数组,速度就会变慢
LinkList底层是由链表实现,在数据量大的时候,需要去到每一个节点去挨个查找,所以查询起来的速度比较慢,但是在新增的时候就比较快
Set集合
HashSet
存储任意多个类型不同的元素,但是是无序(添加顺序和输出顺序不一致),且不能重复,如果有重复元素,会自动去重
Demo
1 | package com.ifueen.classtest._03HashSet; |
TreeSet
支持存储任意多个类型不同的元素,无序(添加顺序和输出顺序不一致)不可重复,但是同时只能放同一种类型,想要添加自定义类型就需要在自定义类里面实现自由排序(自然排序就是实现Comparable接口)
定制排序和自然排序的区别:
自然排序:所有排序都按照统一的规则
定制排序:按照自定义的规则来进行排序
Demo
1 | package com.ifueen.classtest._04TreeSet; |