JAVA-集合类型List(ArrayList、LinkedList)常用操作例子(基础必备)
package com.net.xinfang.reflect; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.LinkedList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; /***
* 集合类(List-LinkedList/ArrayList/Vector,Set,Map-HashTable/HashMap)
*
* @author xinfang
*
*/
public class collect004 {
public void map() {
Map map = new HashMap();
map.put("key1", "lisi1");
map.put("key2", "lisi2");
// 先获取map集合的所有键的set集合,keyset()
Iterator it = map.keySet().iterator();
// 获取迭代器
// 第一种遍历Iterator-keySet
while (it.hasNext()) {
Object key = it.next();
System.out.println(map.get(key));
}
// 第二种遍历(推荐,效率高)-entrySet
// 将map集合中的映射关系取出,存入到set集合
Iterator it1 = map.entrySet().iterator();// 创建迭代对象
while (it1.hasNext()) {// hasNext判断是否还有下一个元素
Entry e = (Entry) it1.next();
System.out.println("键" + e.getKey() + "的值为" + e.getValue());
}
// foreach遍历方式-keySet
Map<String, Integer> ma = new HashMap<String, Integer>();
ma.put("二阳", 23);
ma.put("二峥", 24);
Set<String> keys = ma.keySet(); // 把键其中起来,存入到set集合中.
for (String key : keys) { // 遍历键集合,获取每一个键
Integer value = ma.get(key); // 让键去找值 get(Object key)
System.out.println(key + "***" + value);
}
// entrySet
Set<Map.Entry<String, Integer>> set = ma.entrySet();
for (Map.Entry<String, Integer> me : set) { // 遍历键值对集合,获取到每一个键值对。增强for,迭代器
String key = me.getKey(); // 通过键值对获取键getKey()
Integer value = me.getValue(); // 通过键值对获取值getValue()
System.out.println(key + "***" + value);
}
} public void List() {
List<String> strList = new ArrayList<>();// 动态数组-get/set快
List<String> linkList = new LinkedList<>();// 链表-插入/删除快
//ArrayList<String> ast=new ArrayList<>();
//LinkedList<String> list=new LinkedList<>();
linkList.add("2");
linkList.add("1");
linkList.add("1");
strList.add("1");// 添加元素
strList.add("2");
strList.toString();// 转换字符串
strList.size();// 获取长度
strList.get(0);// 获取索引为0的值
strList.remove(0);// 移除索引为0的值
Collections.sort(linkList);// 排序
removeDuplicate(linkList);// 去重
strList.contains("1");// 判断是否包含1
strList.set(0, "1");// 替换索引为0的值
strList.add(1, "2");// 添加索引为1的值
strList.indexOf("1");// 获取第一个出现1的索引位置
strList.lastIndexOf("2");// 获取最后一个出现2的索引位置
strList.subList(0, 1);// 截取0<=index<1的值作为新的List
// equals值比较相等,hashcode相等的对象就不一定是相等的对象
strList.isEmpty();// 空为true,非空为false
strList.iterator();// 返回iterator集合对象
// for循环方式遍历
for (int i = 0; i < strList.size(); i++) {
System.out.println(strList.get(i));
}
// foreach遍历list
for (String obj : strList) {
System.out.println(obj);
}
for (String obj : linkList) {
System.out.println(obj);
}
// Iterator接口迭代遍历
Iterator<String> it = strList.iterator();
while (it.hasNext()) {
String obj = it.next();
System.out.println(obj);
}
// List转换为数组
// 第一种for循环转换
String string[] = new String[strList.size()];
for (int i = 0, j = strList.size(); i < j; i++) {
string[i] = strList.get(i);
}
// 第二种调用toArray函数转换
String[] strings = new String[strList.size()];
strList.toArray(strings);
for (String str : strings) {
System.out.println(str);
}
// 数组转换为List
String[] s = { "a", "b", "c" };
List<String> list = new ArrayList<>(Arrays.asList(s));
for (String st : list) {
System.out.println(st);
}
} // 利用HashSet特性去重
public static void removeDuplicate(List list) {
HashSet h = new HashSet(list);
list.clear();
list.addAll(h);
System.out.println(list);
} // 前者与后者比较去重
public static void removeDuplicate1(List list) {
for (int i = 0; i < list.size() - 1; i++) {
for (int j = list.size() - 1; j > i; j--) {
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
System.out.println(list);
} public void list1() {
String a = "A", b = "B", c = "C", d = "D", e = "E";// 定义要插入集合的字符串对象
List<String> list = new LinkedList<String>();// 创建List集合
list.add(a);// 向集合中添加元素
list.add(b);
list.add(c);
Iterator<String> iter = list.iterator();// 创建集合的迭代器
System.out.println("修改后 前集合 中的元素是:");
while (iter.hasNext()) {
System.out.print(iter.next() + " ");
}
list.set(0, e);// 将索引位置为0的对象修改为对象e
list.set(2, d);// 将索引位置为2的对象修改为对象d
Iterator<String> it = list.iterator();// 创建将集合对象修改后的迭代器对象
System.out.println();
System.out.println("修改后的集合中的元素是:");
while (it.hasNext()) {// 循环获取集合中的元素
System.out.print(it.next() + " ");
}
List list1 = new ArrayList();// 创建集合对象
int i = (int) (Math.random() * (list.size() - 1));// 获得0-2之间的随机数
list1.add("a");// 向集合中添加元素
list1.add("b");
list1.add("c");
System.out.println("随机获取数组中的元素:" + list1.get(i));//
list1.remove(2);// 将指定索引位置的元素从集合中移除
System.out.println("将索引是'2'的元素从数组中移除后,数组中的元素是:");
for (int j = 0; j < list1.size(); j++) {// 循环遍历数组
System.out.print(list1.get(j) + " ");
}
} public static void main(String args[]) {
collect004 c1 = new collect004();
c1.map();
c1.List();
c1.list1();
// 冒泡排序
/***
* 基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。
* 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
*/
int[] a = { 1, 3, 2 };
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
}
}
}
for (int k : a) {
System.out.println(k);
}
int arr[] = { 23, 12, 6 };
// 冒泡排序(比较相邻的两个元素,大的往后排,小的往前移动,第一层循环避免漏排,第二层循环比较排序)
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
int t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
for (int k : arr) {
System.out.println(k);
}
/***
* 选择排序-比较第一个与第二个,以此类推,大的往后移,小的往前移 冒泡排序-相邻的比较,大的往后移,小的往前移
* 快速排序-选择第一个或最后一个元素作为基准元素, 第一趟扫描分为两部分(一部分为比基准元素小的,一部分比基准元素大的),然后分别递归排序
* 插入排序-选择一个记录元素,比较后排序插入新的数组
*/
//插入排序
int brr[] = {2, 3, 1, 5};
int i, j, insertNote;// 要插入的数据
for (i = 1; i < brr.length; i++) {// 从数组的第二个元素开始循环将数组中的元素插入
insertNote = brr[i];// 设置数组中的第2个元素为第一次循环要插入的数据
j = i - 1;
while (j >= 0 && insertNote < brr[j]) {
brr[j + 1] = brr[j];// 如果要插入的元素小于第j个元素,就将第j个元素向后移动
j--;
}
brr[j + 1] = insertNote;// 直到要插入的元素不小于第j个元素,将insertNote插入到数组中
}
for (int k : brr) {
System.out.println(k);
}
}
}
JAVA-集合类型List(ArrayList、LinkedList)常用操作例子(基础必备)的更多相关文章
- Java——集合框架之ArrayList,LinkedList,迭代器Iterator
概述--集合框架 Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection ...
- java-map复合类型(HashMap-TreeMap)常用操作例子(适合初学者)
package com.net.xinfang.reflect; import java.util.ArrayList; import java.util.HashMap; import java.u ...
- Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- JAVA集合类型(二)
JAVA集合类型 (现代的变量集群) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0J ...
- Java集合框架之ArrayList浅析
Java集合框架之ArrayList浅析 一.ArrayList综述: 位于java.util包下的ArrayList是java集合框架的重要成员,它就是传说中的动态数组,用MSDN中的说法,就是Ar ...
- Java 集合 JDK1.7的LinkedList
Java 集合 JDK1.7的LinkedList @author ixenos LinkedList LinkedList是List接口的双向链表实现,JDK1.7以前是双向循环链表,以后是双向非循 ...
- java集合系列之ArrayList源码分析
java集合系列之ArrayList源码分析(基于jdk1.8) ArrayList简介 ArrayList时List接口的一个非常重要的实现子类,它的底层是通过动态数组实现的,因此它具备查询速度快, ...
- java集合类型源码解析之ArrayList
前言 作为一个老码农,不仅要谈架构.谈并发,也不能忘记最基础的语言和数据结构,因此特开辟这个系列的文章,争取每个月写1~2篇关于java基础知识的文章,以温故而知新. 如无特别之处,这个系列文章所使用 ...
- Java集合 之List(ArrayList、LinkedList、Vector、Stack)理解(new)
一. ArrayList底层实现原理 对比 和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOn ...
随机推荐
- 我的代码库-Java8实现FTP与SFTP文件上传下载
有网上的代码,也有自己的理解,代码备份 一般连接windows服务器使用FTP,连接linux服务器使用SFTP.linux都是通过SFTP上传文件,不需要额外安装,非要使用FTP的话,还得安装FTP ...
- 华为Python 算法面试题
华为算法面试题 """ 算法题: 提供一个序列,完成对这个序列的分割.要求分割后的两个序列彼此差值最小 实现函数,返回两个序列 """ de ...
- eclipse 保存html 提示 save could not be completed
重启ecplise 即可
- MT【308】投影的定义
已知向量$\overrightarrow{a},\overrightarrow{b}$满足:$|\overrightarrow{a}|=2$,向量$\overrightarrow{b}$与$\over ...
- BUG关闭原因
已解决:缺陷已经修复. 重复缺陷:是指在系统里相同原因的缺陷已经被其他人报告.在此缺陷被作为重复缺陷返回时,先不要立即取消.必须等到核查修复后,才在系统里取消.这是因为有些缺陷被误认为是重复缺陷,实际 ...
- 测试工作常用SQL查询语句
一.查询数值型数据: SELECT * FROM tb_name WHERE sum > 100; 查询谓词:>,=,<,<>,!=,!>,!<,=>, ...
- 「JLOI2015」城池攻占 解题报告
「JLOI2015」城池攻占 注意到任意两个人的战斗力相对大小的不变的 可以离线的把所有人赛到初始点的堆里 然后做启发式合并就可以了 Code: #include <cstdio> #in ...
- luogu4093 序列 (cdq分治优化dp)
设f[i]是以i位置为结尾的最长满足条件子序列的长度 那么j能转移到i的条件是,$j<i , max[j]<=a[i] , a[j]<=min[i]$,其中max和min表示这个位置 ...
- luogu5021 [NOIp2018]赛道修建 (二分答案+dp(贪心?))
首先二分一下答案,就变成了找长度>=m的 不相交的路径的个数 考虑到在一个子树中,只有一个点能出这个子树去和别的点搞 所以我这个子树里尽量自我满足是不会有坏处的 而且要在自我满足数最大的条件下, ...
- luogu2282/bzoj1219 历史年份 (dp+hash+二分+线段树)
luogu1415 拆分数列的加强版 先考虑弱化版怎么做 设f[i]表示某一串数,最后一个数的右端点是i时,它的左端点的最大值(也就是说,这一串数的最后一个数尽量小) 那么有$f[j]=max\{i+ ...