Java集合结构分析及方法的使用

文章介绍了Java编程中集合框架的概念,重点讲解了Collection接口及其子接口List和Set,包括ArrayList和LinkedList的区别,以及Set接口的实现类HashSet和TreeSet的特性。ArrayList基于数组,适合随机访问;LinkedList基于链表,适合插入和删除操作。对于Set接口,TreeSet能进行自然排序或自定义排序。
摘要由CSDN通过智能技术生成

        集合和数组都是可以存数据的。但真实开发的时候用的是集合而不是数组。因为数组的容量是固定的,而且数组封装的方法比较少。

一、集合结构

Interface Collection<E> Java 中集合的总接口

---| List<E> Colletion的子接口,特征:存放数据是有序的,可以重复

---|---| ArrayList<E> List的实现类,重写了List接口所有的抽象方法,底层是数组

---|---| LinkedList<E> List的实现类,里面有自己独有的方法 底层是链表

---| Set<E> Collection的子接口, 特征: 存放数据是无序的,不可重复

--|--| HashSet<E> Set的实现类,底层是Hash算法

--|--| TreeSet<E> Set的实现类,底层是二叉树

二、Collection接口(了解)

        开发常用Arraylist去实现List,List又是Collection的子接口,因此可以先学习Collection中的方法,之后再学习LIst和ArrayList中的独有的方法

2.1、Collection下面的方法:

boolean add(E e);	添加数据的
boolean addAll(Collection<? extends E> c);	添加集合
        
boolean remove(Object obj);	删除指定的元素
boolean	removeAll(Collection<?> c)	删除集合中包含的所有此集合的元素
    
boolean contains(Object obj);	判断在集合中是否包含该元素
boolean containsAll(Collection<? extends E> c); 判断集合是否是另一个集合的子集
    
int size();  集合中元素个数
void clear();  清空集合中元素
boolean isEmpty(); 判断集合是否为空
    
Object[] toArray();	将集合转为数组

三、List接口

List下面有自己独有的一些方法,子接口比父接口的功能全

语法格式:

ArrayList<E> arrayList = new ArrayList<E>();

3.1、List下面独有的方法(也可以调用继承的方法)

boolean add(int index, E e);  在指定索引下标的位置插入一个数据
boolean  addAll(int index, Collection<? extends E> c);	在指定下标为位置 插入另外一个集合
    
E remove(int index); 	通过索引删除数据,返回的是被删除的元素
E set(int index, E e);	替换指定下标的元素,返回值是被替代的元素
E get(int index);  获取指定的下标的元素
    
int indexOf(Object obj);	通过元素获取指定的下标
int lastIndexOf(Object obj);	获取指定元素的最后一次出现的下标
    
List<E> subList(int startIndex, int endIndex); 截取集合中的一段
    
ListIterator<E> listIterator = 集合名.listIterator(index);
该迭代器相比父类的迭代器,可以自定义遍历的位置

3.2、ArrayList和LinkedList区别

1.ArrayList底层是数组,LinkedList底层是链表
2.ArrayList在随机取数据的时候效率高于LinkedList   
3.ArrayList在删除和插入的时候效率低于LinkedList  
4.ArrayList会自己扩容,需要预留一定空间的
5.LinkedList 是存储数据的节点的信息以及节点信息的内存的指针

四、Set接口

Set接口下面有两个实现类:HashSet和TreeSet

4.1、HashSet

语法格式:

Set<E> set= new HashSet<E>();

只能用for循环、增强for循环和迭代器来读取数据

4.2、set集合中存自定义的对象

        需要在实例类中重写hashCode和equals方法,确保set集合中存入的自定义对象是完全不同的对象。(可以快捷键,也可以自定义重写。自定义重写时,两个方法的返回值必须和自定义对象的属性有关才可以)

4.3、TreeSet

在Set集合内数据无需不重复的基础上,对存入数据会进行自然排序。

语法格式:

//无参:
Set<E> set = new TreeSet<E>();

//有参:
//构造一个新的、空的树集,根据指定的比较器进行排序
TreeSet<Emp> emps = new TreeSet<Emp>(new Comparator<Emp>() {
			@Override
			public int compare(Emp o1, Emp o2) {
				// TODO Auto-generated method stub
				int num = o1.age - o2.age;
				return num;
			}
		});

4.4、TreeSet存自定义的对象

        存对象的时候需要在类的实现Comparable这个接口。该接口对实现它的每个类的对象强加一个整体排序。 这个排序被称为类的自然排序 ,类的compareTo方法被称为其自然比较方法

返回一个负整数,零或正整数,因为该对象小于,等于或大于指定对象

1、如果返回值是负数,就证明对象一 < 对象二,对象一排在对象二前面
2、如果返回值是0,就证明相等,不存
3、如果返回值是正数,就证明对象一 > 对象二,对象一排在对象二后面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值