欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 09:02:30
...

主要内容

  • 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集合下有很多集合,它们的存储结构不同,这样就导致了这些集合它们有各自的特点

二、数据结构:

数据存储的常用结构有:栈、队列、数组、链表和红黑树。
栈特点:先进后出
List集合、Set接口介绍与方法的应用
队列特点:先进先出
List集合、Set接口介绍与方法的应用
数组特点:查询快,增删慢
List集合、Set接口介绍与方法的应用
链表特点:查询慢,增删快
List集合、Set接口介绍与方法的应用
List集合、Set接口介绍与方法的应用
二叉树(红黑树)特点:每个节点只能有2个子节点
List集合、Set接口介绍与方法的应用

三、List的子类

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

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

四、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集合存储数据的结构(哈希表)
List集合、Set接口介绍与方法的应用
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比较器
升序:前减后
降序:后减前