List集合、Set接口介绍与方法的应用

本文介绍了Java集合框架中的List接口及其常用子类ArrayList和LinkedList,包括它们的特点和常用方法。同时,文章讲解了Set接口,特别是HashSet和LinkedHashSet,强调了它们的无序、唯一性特点以及存储原理。最后,提到了Collections工具类的一些实用方法,如添加元素、打乱顺序和排序,并展示了相关代码示例。

主要内容

  • List集合
  • Set集合
  • 数据结构

一、List集合:

LinkedList是List的子类
1、List作为Collection集合的子接口
list的特点:存储有序的,有索引的,元素可重复
2、常用方法:
void add()添加元素到知道位置上
E et ()获取指定位置的元素
E remve() 删除指定位置的元素
E set() 指定元素替换指定位置上的元素
例如:

public class ListDemo {
public static void main(String[] args) {
	// 创建List集合对象
	List<String> list = new ArrayList<String>();
	
	// 往 尾部添加 指定元素
	list.add("图图");
	list.add("小美");
	list.add("不高兴");
	
	System.out.println(list);
	// add(int index,String s) 往指定位置添加
	list.add(1,"没头脑");
	
	System.out.println(list);
	// String remove(int index) 删除指定位置元素  返回被删除元素
	// 删除索引位置为2的元素 
	System.out.println("删除索引位置为2的元素");
	System.out.println(list.remove(2));
	
	System.out.println(list);
	
	// String set(int index,String s)
	// 在指定位置 进行 元素替代(改) 
	// 修改指定位置元素
	list.set(0, "三毛");
	System.out.println(list);
	
	// String get(int index)  获取指定位置元素
	
	// 跟size() 方法一起用  来 遍历的 
	for(int i = 0;i<list.size();i++){
		System.out.println(list.get(i));
	}
	//还可以使用增强for
	for (String string : list) {
		System.out.println(string);
	}  	
}

}

tips:我们之前学习Colletion体系的时候,发现List集合下有很多集合,它们的存储结构不同,这样就导致了这些集合它们有各自的特点

二、数据结构:

数据存储的常用结构有:栈、队列、数组、链表和红黑树。
栈特点:先进后出
在这里插入图片描述
队列特点:先进先出
在这里插入图片描述
数组特点:查询快,增删慢
在这里插入图片描述
链表特点:查询慢,增删快
在这里插入图片描述
在这里插入图片描述
二叉树(红黑树)特点:每个节点只能有2个子节点
在这里插入图片描述

三、List的子类

1、ArrayList集合:是数组结构具有查询快,增删慢的特点
2、LinkedList集合:是链表结构,具有增删快,查询慢的特点
在这里插入图片描述
常用方法:
void addFirst()将元素插入列表的开头
void addList()将元素插入列表的结尾
E getFirst()获取列表的第一个元素
E getList()获取列表的最后一个元素
E removeFirst()删除列表的第一个元素
E removeList()删除列表的最后一个元素
E pop()将列表的第一个元素弹出
void push(E e)在列表的开头推入一个元素
boolean isEmpty()判断列表有没有元素,没有就返回true

在这里插入图片描述

四、Set接口

java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它 与Collection接口中的方法基本一致
我们先来使用一下Set集合存储,看下现象,再进行原理的讲解:

public class HashSetDemo {
public static void main(String[] args) {
    //创建 Set集合
    HashSet<String>  set = new HashSet<String>();

    //添加元素
    set.add(new String("cba"));
    set.add("abc");
    set.add("bac"); 
    set.add("cba");  
    //遍历
    for (String name : set) {
        System.out.println(name);
    }
}

}
输出结果如下,说明集合中不能存储重复元素:
cba
abc
bac

1、 HashSet集合
java.util.HashSet是Set接口的一个实现类,没有特有的方法
特点:元素无序的,无索引,不可重复的HashSet是根据哈希值来确定元素存储的位置,它是由数组+链表+红黑组成的结构,它 能保证唯一性的方式:hashcoder和equals方法
原理是:
(1)、首先会调研该元素的hashcode方法来计算该元素的哈希值;
(2)、再判断该元素哈希值上的位置是否有相同的哈希值的元素;
(3)、如果没有就直接存储进去;
(4)、如果有哈希值相同的元素存储在里面就会产生哈希值冲突;
(5)、产生到了哈希值冲突就会调用该元素的equals方法来与该位置上的所有元素一一比较,如果元素没有相同的就会返回一个true,就存储在里面

1.1 HashSet集合存储数据的结构(哈希表)
在这里插入图片描述
2、LinedHashSet集合
特点:元素有序的额,没有索引,不可重复

演示代码如下:
public class LinkedHashSetDemo {
public static void main(String[] args) {
Set set = new LinkedHashSet();
set.add(“bbb”);
set.add(“aaa”);
set.add(“abc”);
set.add(“bbc”);
Iterator it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
结果:
bbb
aaa
abc
bbc
3、可变参数
格式:修饰符 返回值类型 方法名(参数类型,…形参名){ }
等价于 修饰符 返回值类型 方法名(参数类型[]形参名){ }
代码演示:
public class ChangeArgs {
public static void main(String[] args) {
int[] arr = { 1, 4, 62, 431, 2 };
int sum = getSum(arr);
System.out.println(sum);
// 6 7 2 12 2121
// 求 这几个元素和 6 7 2 12 2121
int sum2 = getSum(6, 7, 2, 12, 2121);
System.out.println(sum2);
}

/*
 * 完成数组  所有元素的求和 原始写法
 
  public static int getSum(int[] arr){
    int sum = 0;
    for(int a : arr){
        sum += a;
    }
    
    return sum;
  }
*/
//可变参数写法
public static int getSum(int... arr) {
    int sum = 0;
    for (int a : arr) {
        sum += a;
    }
    return sum;
}

}
tips: 上述add方法在同一个类中,只能存在一个。因为会发生调用的不确定性
注意:如果在方法书写时,这个方法拥有多参数,参数中包含可变参数,可变参数一定要写在参数列表的末尾位置。

五、Collections

1、常用方法:
static boolean addAll(Collectionc,T…elements)往集合中添加元素
static void shuffle(list<?>list)打乱顺序
static void sort(list<?>list)将集合中元素按默认规则来排序
staticvoid sort(listlist,Comparator<?super T>)将集合中的元素按指定的规则来排序
代码演示:
public class CollectionsDemo {
public static void main(String[] args) {
ArrayList list = new ArrayList();
//原来写法
//list.add(12);
//list.add(14);
//list.add(15);
//list.add(1000);
//采用工具类 完成 往集合中添加元素
Collections.addAll(list, 5, 222, 1,2);
System.out.println(list);
//排序方法
Collections.sort(list);
System.out.println(list);
}
}
结果:
[5, 222, 1, 2]
[1, 2, 5, 222]

2、Comparator比较器
升序:前减后
降序:后减前

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值