当前位置: 首页 > news >正文

Java学习笔记六(集合)

注释:数组(固定长度)或集合(可扩展长度),用来存储相同类型的多条数据。

集合选择方式:

1 Collection接口

常用Collection接口函数:

(1) 添加元素:boolean add(E e);(2) 添加结合:boolean addAll(Collection c);(3) 删除元素:boolean remove(Object o);(4) 删除集合:boolean removeAll(Collection c);(5) 删除全部:void clear();(6) 获取长度:int size();(7) 判断空:boolean isEmpty();(8) 集合转数组:Object[] toArray();(9) 元素存在判断:boolean contains(Object o);(10) 集合元素存在判断:boolean containsAll(Collection c);(11) 迭代器:Iterator <E> iterator();

1.1 List接口

常用List接口函数:

(1) 添加元素:boolean add([int index,] E e); (2) 添加集合:boolean addAll([int index,] Collection c);(3) 删除元素:boolean remove(int index);(4) 获取元素:Object get(int index);(5) 获取下标:int indexOf(Object o);(6) 获取元素最后所在下标:int lastIndexOf(Object o);(7) 修改元素:Object set(int index, Object o);(8) List转数组:list.toArray() (9) 数组转List:Arrays.toList(数组)(10) 获取迭代器:ListIterator <E> listIterator(); // 在变量集合时,会修改元素的情况下使用

遍历集合:

Iterator it = list.listIterator();
while (it.hasNext()) { // 判断是否有下一个元素xx = it.next(); // 获取下一个元素,并且光标下移it.remove();    // 删除元素,用list.remove(it.next());会异常
}
for (Object o : list) { // 增强型for循环,遍历集合...
}
for (int i; i<10; i++) {list.get(i); // 获取元素list.remove(i); // 删除元素,为正常继续执行,需要 i--
}

1.1.1 ArrayList 实现类

数据存储有序(数据按插入的先后顺序排列),查询速度快

1.1.2 LinkedList 实现类

数据存储有序(数据按插入的先后顺序排列),随机插入效率高

1.1.3 Vector 实现类

数据存储有序(数据按插入的先后顺序排列),线程安全

1.2 Set接口

1.2.1 HashSet  实现类

数据存储无序,存储数据值唯一可存null

1.2.2 LinkedHashSet 实现类

数据存储有序(数据按插入的先后顺序排列),存储数据值唯一可存null

1.2.3 TreeSet 实现类

数据存储有序(自动升序),存储数据值唯一不可存null

2 Map接口

(1) 添加元素:Object put(Object key, Object value)(2) 添加集合:void putAll(Map map)(3) 删除元素:Object remove(Object key);(4) 删除元素:boolean remove(Object key, Object value)(5) 获取元素:Object get(Object key)(6) 获取元素:Object getOrDefault(Object key, Object defaultValue)(7) 获取长度:int size()(8) 判断是否为空:boolean isEmpty()(9) 获取键集合:Set keySet();(10) 获取键值对集合:Set entrySet();(11) 获取值集合:Collection values();(12) 键存在判断:boolean containsKey(Object key)(13) 值存在判断:boolean containsValue(Object value)

遍历Map集合:

Set<String> keys = map.keySet();
for (String key : keys) { // 遍历键集合...
}
Set<Entry<String, Object>> entrys = map.entrySet();
for (Entry e : entrys) {    // 遍历键值对集合String key = e.getKey();Object obj = e.getValue();
}
List<String> list = map.values(); // 变量Map值的集合
for (String val : list) {...
}

2.1 HashMap 实现类

数据存储无序键唯一可null),值(可null

2.2 LinkedHashMap 实现类

数据存储有序(数据按插入顺序存储),键唯一可null),值(可null

2.3 TreeMap 实现类

数据存储有序(键升序),键唯一不可null),值(可null

2.4 Hashtable 实现类

数据存储无序键唯一不可null),值(不可null),线程安全

3 排序

3.1 默认排序

3.1.1 数组排序

(1) Arrays.sort(args)

String[] args =  new String[3];
args[0] = "2"; args[1] = "1"; args[2] = "3";Arrays.sort(args); // 默认排序 1,2,3for (String str : args) {System.out.println(str);
}

3.1.2 List排序

(1) Collections.sort

List<String> list = new ArrayList<String>();
list.add("3");list.add("1");list.add("2");Collections.sort(list); // 默认排序 1,2,3for (String str : list) {System.out.println(str);
}

(2)list.sort(null)

List<String> list = new ArrayList<String>();
list.add("3");list.add("1");list.add("2");list.sort(null); // 默认排序 1,2,3for (String str : list) {System.out.println(str);
}

3.2 自定义排序(Comparator)

3.2.1 数组排序

(1) Arrays.sort(args, Comparator)

注释:基本类型数组,必须定义为包装类类型

// 基本类型必须使用 包装类(Integer...等)
String[] args =  new String[3];
args[0] = "2"; args[1] = "1"; args[2] = "3";Arrays.sort(args, (s1, s2) -> s1.compareTo(s2)); // 升序排序 1,2,3
Arrays.sort(args, (s1, s2) -> s2.compareTo(s1)); // 降序排序 3,2,1for (String str : args) {System.out.println(str);
}

3.2.2 List排序

(1) Collections.sort(list, Comparator)

List<String> list = new ArrayList<String>();
list.add("3");list.add("1");list.add("2");Collections.sort(list, (s1, s2) -> s1.compareTo(s2)); // 升序 1,2,3
Collections.sort(list, (s1, s2) -> s2.compareTo(s1)); // 降序 3,2,1for (String str : list) {System.out.println(str);
}

(2)list.sort(Comparator)

List<String> list = new ArrayList<String>();
list.add("3");list.add("1");list.add("2");list.sort((s1, s2) -> s1.compareTo(s2)); // 升序 1,2,3
list.sort((s1, s2) -> s2.compareTo(s1)); // 降序 3,2,1for (String str : list) {System.out.println(str);
}

3.3 对象排序(Comparable)

排序实现方式:对象实现Comparable接口,重写compareTo方法。

// 对象类
public class Test implements Comparable<Test> {private String name;private int age;@Overridepublic int compareTo(Test t) {
//		return name.compareTo(t.getName()); // 按名称升序
//		return t.getName().compareTo(name); // 按名称降序
//		return age - t.getAge(); // 按年龄升序return t.getAge() - age; // 按年龄降序}
}
// 测试类
Test t1 = new Test();
t1.setAge(10);
t1.setName("S2");Test t2 = new Test();
t2.setAge(15);
t2.setName("S1");Test t3 = new Test();
t3.setAge(18);
t3.setName("S3");List<Test> list = new ArrayList<Test>();
list.add(t1);
list.add(t2);
list.add(t3);Collections.sort(list); // 方式1:自定义对象compareTo的排序
list.sort(null);        // 方式2:自定义对象compareTo的排序for (Test test : list) {System.out.println(test.getName());
}
http://www.dtcms.com/a/418463.html

相关文章:

  • 简易分析慢 SQL 的流程和方法
  • Docker 中删除镜像与容器的完整指南
  • 通州手机网站建设北京网站设计实力乐云践新
  • 高速PCB板DDR5数据信号的长STUB要背钻吗?
  • FPGA强化-简易频率计
  • VBScript自动化打印:智能过滤Word文档
  • 解码数据结构内核链表
  • 郑州设计网站公司东莞建设银行电话号码
  • 个人网站的建设目标绥德网站建设
  • Elasticsearch面试精讲 Day 23:安全认证与权限控制
  • 学习嵌入式的第四十三天——ARM——I2C
  • 玳瑁的嵌入式日记---0928(ARM--UART)
  • CentOS 8 部署 Zabbix 7.0 LTS 完整流程(PostgreSQL)及不同系统agent安装
  • 网站开发环境设计怎么在百度做网站推广
  • Langchain+Neo4j+Agent 的结合案例-电商销售
  • 计算机网络【第二章-物理层】
  • 计算机网络【第一章-计算机网络体系结构】
  • mac 安装npm之后,其他终端无法访问
  • 购物网站哪个最好记账公司如何拉客户
  • 汽车网络安全 CyberSecurity ISO/SAE 21434 测试之四
  • ARM芯片架构之APB,ATB总线
  • 死信队列(Dead-Letter Queue,DLQ)
  • Python 2025:网络安全与智能防御新范式
  • 2025软考甄选范文“论分布式事务及其解决方案”,软考高级,系统架构设计师论文
  • 学习前端开发的网站占酷设计网站官网入口
  • 【R语言验证统计量的渐进分布】
  • starrocks查询伪代码
  • R语言中的S3 泛型与方法
  • 安全运维实战指南:常见病毒防护操作手册
  • 爬虫逆向——RPC技术