-
常见的数据结构:
- 栈:先进后出,分为压栈和弹栈
- 队列:属于线性表的一种,先进先出
- 数组:有序元素序列
- 查询元素快,通过索引访问指定位置的元素
- 增删元素慢,因为增删元素时需要创建一个新的数组,先存元素索引,在存储元素的值
- 链表:数据域存储数据,指针域存储下一个结点的地址
- 查询元素慢
- 增删元素快
-
List接口常用方法:数组结构特点
-
常用语法:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
/*
java.util.List接口 extends Collection接口
List接口的特点:
1.有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123)
2.有索引,包含了一些带索引的方法
3.允许存储重复的元素List接口中带索引的方法(特有) - public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。 - public E get(int index):返回集合中指定位置的元素。 - public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。 - public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。 注意: 操作索引的时候,一定要防止索引越界异常 IndexOutOfBoundsException:索引越界异常,集合会报 ArrayIndexOutOfBoundsException:数组索引越界异常 StringIndexOutOfBoundsException:字符串索引越界异常
*/
public class Demo1List {public static void main(String[] args) {
// ListMethod1();
LinkedDemo1(); } private static void ListMethod1(){ List<String> list1 = new ArrayList<String>(); list1.add("123"); list1.add("测试内容"); System.out.println("第一次添加测试:"+ list1); list1.add(1,"添加元素"); System.out.println("添加的内容:"+list1); System.out.println("删除索引位置为2的元素:"+list1.remove(2)); list1.set(0,"修改元素"); System.out.println("指定位置修改元素:"+list1); // 遍历列表集合 for (int i = 0; i <list1.size() ; i++) { System.out.println("遍历的结果:"+list1.get(i)); } }
-
-
LinkedList:
-
集合数据存储的结构是链表结构。方便元素添加、删除的集合
/* java.util.LinkedList集合 implements List接口 LinkedList集合的特点: 1.底层是一个链表结构:查询慢,增删快 2.里边包含了大量操作首尾元素的方法 注意:使用LinkedList集合特有的方法,不能使用多态 - public void addFirst(E e):将指定元素插入此列表的开头。 - public void addLast(E e):将指定元素添加到此列表的结尾。 - public void push(E e):将元素推入此列表所表示的堆栈。 - public E getFirst():返回此列表的第一个元素。 - public E getLast():返回此列表的最后一个元素。 - public E removeFirst():移除并返回此列表的第一个元素。 - public E removeLast():移除并返回此列表的最后一个元素。 - public E pop():从此列表所表示的堆栈处弹出一个元素。 - public boolean isEmpty():如果列表不包含元素,则返回true。 */ public class LinkedListDemo { public static void main(String[] args) { LinkedList<String> link = new LinkedList<String>(); //添加元素 link.addFirst("abc1"); link.addFirst("abc2"); link.addFirst("abc3"); System.out.println(link); // 获取元素 System.out.println(link.getFirst()); System.out.println(link.getLast()); // 删除元素 System.out.println(link.removeFirst()); System.out.println(link.removeLast()); while (!link.isEmpty()) { //判断集合是否为空 System.out.println(link.pop()); //弹出集合中的栈顶元素 } System.out.println(link); } }
-
Set集合
-
存储的数据是不可重复且无需的;
-
底层实现是hashMap;
-
保证元素唯一性方法依赖于hashCode and equals方法;
-
给HashSet中存放自定义元素是,需要重写hashCode 和equals方法;
import java.security.PublicKey;
import java.util.HashSet;
import java.util.LinkedHashSet;/*
java.util.Set接口 extends Collection接口
Set接口的特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
java.util.HashSet集合 implements Set接口
HashSet特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
3.是一个无序的集合,存储元素和取出元素的顺序有可能不一致
4.底层是一个哈希表结构(查询的速度非常的快)
*/
public class Demo1Set {
public static void main(String[] args) {
HashSetDemo();
LinkedHashSetTest();} private static void HashSetDemo(){ HashSet<String> settest1 = new HashSet<String>(); settest1.add("abc"); settest1.add("abc"); settest1.add("123"); settest1.add("456"); System.out.println(settest1); // 无序不重复 for (String s : settest1) { System.out.println(s); } } private static void LinkedHashSetTest(){ LinkedHashSet<String> linked = new LinkedHashSet<String>(); linked.add("123"); linked.add("123"); linked.add("789"); linked.add("456"); System.out.println("LinkedHashSetTest内容测试:"+linked); // 有序不重复 for (String i:linked){ System.out.println("遍历后的结果:"+ i); } }
}
HashSet:
存储自定义类型元素:哈希表底层采用数组+链表实现
LinkedHashSet:
链表和哈希表组合的一个数据存储结构
-
可变参数:
-
参数类型一致,且需要接受多个参数
-
底层实现是一个数组
/* 1.可变参数:是JDK1.5之后出现的新特性 使用前提: 当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数. 使用格式:定义方法时使用 修饰符 返回值类型 方法名(数据类型...变量名){} 可变参数的原理: 可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数 传递的参数个数,可以是0个(不传递),1,2...多个 2. 可变参数的注意事项 1.一个方法的参数列表,只能有一个可变参数 2.如果方法的参数有多个,那么可变参数必须写在参数列表的末尾 */ /*public static void method(String b,double c,int d,int...a){ }*/ public class Demo1ChangeArgs { public static void main(String[] args) { // int a = addTest(1,3,4,5,6); // int b = sumTest(10,20,30,40,50); // System.out.println("可变参数sum结果:"+ b); method("abc",5.5,10,1,2,3,4); } public static int addTest(int...arrTest){ System.out.println(arrTest); // 地址值 System.out.println(arrTest.length); // 长度 return 0; } public static int sumTest(int...arrTest){ int sum = 0; for (int i : arrTest) { sum+=i; } return sum; } public static void method(Object...obj){ System.out.println(obj); } }
-
-
Collections
import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; /*public static <T> boolean addAll(Collection<T> c, T... elements) :往集合中添加一些元素。 public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。 public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。 public static <T> void sort(List<T> list,Comparator<? super T> ) :将集合中元素按照指定规则排*/ public class CollectionDemo { public static void main(String[] args) { Demo1(); comparetorDemo1(); } public static void Demo1(){ ArrayList<Integer> list1 = new ArrayList<Integer>(); Collections.addAll(list1, 1,2,4,8,5); System.out.println("集合工具类之添加元素:"+list1); Collections.sort(list1); System.out.println("排序后的结果:"+ list1); } public static void comparetorDemo1(){ ArrayList<String> list1 = new ArrayList<String>(); Collections.addAll(list1, "abc", "cba", "bac"); Collections.sort(list1, new Comparator<String>() { @Override public int compare(String o1, String o2) { // return o2.charAt(0) - o1.charAt(0); // 降序操作 return o1.charAt(0) - o2.charAt(0); // 升序操作 } }); System.out.println("升序操作:"+ list1); } }
-
Comparator比较器
-
-
-
第八章 List、Set、数据结构、Collections
笑口常开的小丸子2023-12-09 10:32
相关推荐
小园子的小菜21 分钟前
深入探究 RocketMQ 中的 Broker2Client 组件bing_15830 分钟前
Mybatis 如何自定义缓存?RainbowSea33 分钟前
8. RabbitMQ 消息队列 + 结合配合 Spring Boot 框架实现 “发布确认” 的功能RainbowSea1 小时前
7. RabbitMQ 消息队列——延时队列(Spring Boot + 安装message_exchange"延迟插件" 的详细配置说明)的详细讲解XuanXu1 小时前
Java volatile关键字以及线程安全都叫我大帅哥1 小时前
代码世界的「万能转接头」:适配器模式的跨界艺术蝈蝈噶蝈蝈噶2 小时前
问题:tomcat下部署eureka双重路径禹曦a2 小时前
Java进阶之旅-day05:网络编程五行星辰2 小时前
Gson修仙指南:谷歌大法的佛系JSON渡劫手册