List集合、Set接口介绍与方法的应用
主要内容
- 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比较器
升序:前减后
降序:后减前
上一篇: 对Camel的一点感触
下一篇: @Configuration
推荐阅读
-
荐 Java语言基础之Collection接口、List集合、Set集合的基本使用
-
List集合、Set接口介绍与方法的应用
-
Collection中的Set与list 的一些实际应用
-
javascript的小白教程-之函数的简单介绍与应用方法
-
Set接口常用方法的简单应用
-
Java__单列集合Collection中List接口与Set接口的简单应用
-
关于集合与数组的区别,Collection、List、Set接口的作用及相关的子类
-
Java集合框架 List集合、Set集合、Map集合 学习泛型与包装类的装箱拆箱
-
Java中的Set、List、Map的用法与区别介绍
-
python-set集合类方法的详细介绍