List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下 >标)来访问List中的元素,这类似于Java的数组。

迭代器

Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。

调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。

调用 it.hasNext() 用于检测集合中是否还有元素。

调用 it.remove() 将迭代器返回的元素删除。

API

List list = new ArrayList();// 向列表的尾部追加指定的元素list.add("lwc");// 在列表的指定位置插入指定元素list.add(1, "nxj");// 追加指定 collection 中的所有元素到此列表的结尾list.addAll(new ArrayList());// 从列表中移除所有元素list.clear();// 如果列表包含指定的元素,则返回truelist.contains("nxj");// 如果列表包含指定 collection 的所有元素,则返回 truelist.containsAll(new ArrayList());// 比较指定的对象与列表是否相等list.equals(new ArrayList());// 返回列表中指定位置的元素list.get(0);// 返回列表的哈希码值list.hashCode();// 返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1list.indexOf("lwc");// 返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回 -1list.lastIndexOf("lwc");// 如果列表不包含元素,则返回 truelist.isEmpty();// 移除列表中指定位置的元素list.remove(0);// 移除列表中出现的首个指定元素list.remove("lwc");// 从列表中移除指定 collection 中包含的所有元素list.removeAll(new ArrayList());// 用指定元素替换列表中指定位置的元素list.set(0, "lp");// 返回列表中的元素数list.size();// 返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图list.subList(1, 2);// 返回以正确顺序包含列表中的所有元素的数组list.toArray();// 返回以正确顺序包含列表中所有元素的数组list.toArray(new String[] { "a", "b" });

排序

简单数值排序 直接用Collections.sort( );方法

    List<Integer> list = new ArrayList<Integer>();list.add(new Integer(3));list.add(new Integer(14));list.add(new Integer(6));list.add(new Integer(10));Collections.sort(list);System.out.println(list.toString());

复杂排序需要类继承Comparable 接口并重写 CompareTo方法

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {public static void main(String[] args) {List<User> list = new ArrayList<User>();list.add(new User("张三", 5));list.add(new User("李四", 30));list.add(new User("王五", 19));list.add(new User("王麻子", 17));// 按年龄排序Collections.sort(list); System.out.println(list.toString());}
}class User implements Comparable<User>{private String name; //姓名private int age; // 年龄public User(String name, int age) {this.name = name;this.age = age;}// getter && setterpublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + "]";}@Overridepublic int compareTo(User user) {           // 重写Comparable接口的compareTo方法,根据年龄升序排列,降序修改相减顺序即可return this.age - user.getAge();}
}

匿名内部类实现排序


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class sort {public static void main(String[] args) {List<User> list = new ArrayList<User>();list.add(new User("张三", 5));list.add(new User("李四", 30));list.add(new User("王五", 19));list.add(new User("王麻子", 17));Collections.sort(list, new Comparator<User>() {@Overridepublic int compare(User u1, User u2) {int diff = u1.getAge() - u2.getAge();if (diff > 0) {return 1;}else if (diff < 0) {return -1;}return 0; //相等为0}}); // 按年龄排序System.out.println(list.toString());}
}

遍历

可以用迭代器

List<String> list = new ArrayList<>();
Iterator <String> it = list.iterator();while (it.hasNext()){System.out.println(it.next());}

也可以直接 循环

for(int i = 0;i < list.size(); i ++){System.out.println(list.get(i));
}

循环....

for(String tmp:list){System.out.println(tmp);
}
package com.inspur.Test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;@SuppressWarnings("unused")
public class MapTest {private static List<String> list= new ArrayList<String>();public static void main(String[]args){MapTest  mapTest = new  MapTest();mapTest.initList(mapTest.list);mapTest.iteratorList(list);}public List initList(List<String> list){int i=0;int num=6000000;for(i=0;i<num;i++){list.add("list"+i);}return list;}public void iteratorList(List<String> list){long start= System.currentTimeMillis();for(Iterator<String>  it=list.iterator();it.hasNext();){String value=it.next();}}
}

案例

package com.java.demoSet;import java.util.*;public class Only {public static void item(){List <String> list = new ArrayList<>();list.add("托尼弗格森");list.add("王伟琪");list.add("夜魔");for ( Iterator <String> it = list.iterator();it.hasNext();) {System.out.println(it.next());}String [] temp = (String [])list.toArray(new String [list.size()]);System.out.println(Arrays.toString(temp));}public static void getOnly(){String[] array = {"a","b","c","c","d","e","e","e","a"};Set set = new HashSet();for (int i = 0; i < array.length; i++) {set.add(array[i]);}String [] string = (String [])set.toArray(new String [set.size()]);System.out.println(Arrays.toString(string));}public  Only(){String[] array = {"a","b","c","c","d","e","e","e","a"};List<String> result = new ArrayList<>();boolean flag;for(int i=0;i<array.length;i++){flag = false;for(int j=0;j<result.size();j++){if(array[i].equals(result.get(j))){flag = true;break;}}if(!flag){result.add(array[i]);}}String[] arrayResult = (String[]) result.toArray(new String[result.size()]);System.out.println(Arrays.toString(arrayResult));}public static void main(String[] args) {// Only only = new Only();// Only.getOnly();Only.item();}
}

toArray()方法转string[]数组

List<String> strList = new ArrayList<String>();
strList.add("aa");
strList.add("bb");
//如果要变成String数组,需要强转类型。
final int size = strList.size();
String[] strs = (String[])strList.toArray(new String[size]);

List初始化转string[]数组

List<String> strList = new ArrayList<String>();
strList.add("aa");
strList.add("bb");
String[] strs = new String[strList.size()];
推荐用List自带的toArray()方法转string[]数组

删除元素

  public static void remove14(List<String> list, String target){for(int i = list.size() - 1; i >= 0; i--){String item = list.get(i);if(target.equals(item)){list.remove(item);}}}//迭代器删除public static void remove32(List<String> list, String target){Iterator<String> iter = list.iterator();while (iter.hasNext()) {String item = iter.next();if (item.equals(target)) {iter.remove();}}

合并并删除重复数据

Set s=new TreeSet(l1);
for(Integer i:l2){//当添加不成功的时候 说明s中已经存在该对象s.add(i);
}
System.out.println(s);

手写合并操作(不难,写写更健康)

public static ArrayList addArrayList(ArrayList list1, ArrayList list2) {ArrayList list3 = new ArrayList();if (list1 == null || list1.size() == 0) {list3 = list2;} else if (list2 == null || list2.size() == 0) {list3 = list1;} else {for (int i = 0; i < list1.size(); i++) { // 遍历list1boolean isExist = false;for (int j = 0; j < list2.size(); j++) {if (list1.get(i).equals(list2.get(j))) {isExist = true; // 找到相同项,跳出本层循环break;}}if (!isExist) { // 不相同,加入list3中list3.add(list1.get(i));}}for (int k = 0; k < list2.size(); k++) {list3.add(list2.get(k));}}return list3;
}

LinkedList

public class Person1 implements Comparable < Person1 > {private Float height;private String name;Person1(float height) {this.height = height;}public Float getHeight() {return height;}public void setHeight(float height) {this.height = height;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Override public int compareTo(Person1 p) {if (this.getHeight() < p.getHeight()) {return 1;} else if (this.getHeight() > p.getHeight()) {return - 1;} else {return 0;}}
}public class Question3_1 {public static void main(String[] args) {Person1 p1 = new Person1(23.4f);p1.setName("Stud1");Person1 p2 = new Person1(2.34f);p2.setName("Stud2");Person1 p3 = new Person1(34.32f);p3.setName("Stud3");Person1 p4 = new Person1(56.45f);p4.setName("Stud4");Person1 p5 = new Person1(21.4f);p5.setName("Stud5");LinkedList < Person1 > al = new LinkedList < Person1 > ();al.add(p1);al.add(p2);al.add(p3);al.add(p4);al.add(p5);Collections.sort(al); //这里控制降序for (Person1 p: al) System.out.println(p.getName() + " " + p.getHeight());}
}

Java List 学习记录相关推荐

  1. Java设计模式学习记录-解释器模式

    前言 这次介绍另一个行为模式,解释器模式,都说解释器模式用的少,其实只是我们在日常的开发中用的少,但是一些开源框架中还是能见到它的影子,例如:spring的spEL表达式在解析时就用到了解释器模式,以 ...

  2. Java设计模式学习记录-单例模式

    前言 已经介绍和学习了两个创建型模式了,今天来学习一下另一个非常常见的创建型模式,单例模式. 单例模式也被称为单件模式(或单体模式),主要作用是控制某个类型的实例数量是一个,而且只有一个. 单例模式 ...

  3. Java SE 学习记录06

    @学习记录 开始学习Java 遵从同学的指导,从Java se开始学习 黑马的JavaSE零基础入门 day06-01 面向对象 package day06;import java.util.Arra ...

  4. Java SE 学习记录——进阶版11

    @学习记录 开始学习Java 遵从同学的指导,从Java se开始学习 黑马的JavaSE零基础入门[网络编程] 第一章 网络编程入门 1.1 软件结构 22-02 软件结构 1.2 网络通信协议 2 ...

  5. Java注解学习记录(反射也能实现ButterKnife)

    文章目录 什么是注解(Annotation) 注解有什么用 注解怎么用 注解关键字 @interface 注解属性的数据类型 元注解 @Retention @Target @Documented @I ...

  6. java之学习记录 5 - 1 - 模拟拉勾项目介绍与后台系统搭建

    项目架构(此文章只供个人学习的记录) 1 项目介绍 拉勾教育后台管理系统,是提供给拉勾教育的相关业务人员使用的一个后台管理系统, 业务人员可以在这个后台管理系统中,对课程信息.讲师信息. 学员信息等数 ...

  7. Java 基础学习记录

    Java 基础 DAY1 1.关于进制的运算 2.关于存储单元 3.关于CMD的基本命令 4.JRE与JDK 5.Java环境变量 6.程序开发步骤 7.HelloWorld 8.标识符 9.常量 1 ...

  8. java之学习记录 3 - 2 - es6

    ECMAScript6 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了. 它的目标,是使得JavaScript ...

  9. Java多线程学习记录

    什么是多线程? 首先操作系统有一种能力叫多任务,看起来可以在同一时间运行多个程序,实际上操作系统会为每个进程分配CPU时间片,给人并行处理的感觉. 多线程在更低一层扩展了多任务的概念:单个程序看起来在 ...

  10. Java基础学习记录(三)

    System: 描述系统一些信息. 获取系统属性信息:Properties getProperties 因为Properties是Hashtable子类,也就是Map集合的一个子类对象. 那么可以通过 ...

最新文章

  1. Linux创建指定用户特定指定目录权限
  2. AI造假 vs AI打假 终结“猫鼠游戏”不能只靠技术
  3. 人生失败的31种致命原因
  4. 学习笔记68—PhotoShop常见快捷键
  5. 简单的协议应用-代理模式
  6. leetcode 363. Max Sum of Rectangle No Larger Than K | 363. 矩形区域不超过 K 的最大数值和(前缀和,图文详解)
  7. hive olap 数据仓库_数据仓库系统的实现和使用(含OLAP重点讲解)
  8. mmap函数_Linux内存映射mmap原理分析
  9. oh-my-zsh扫描git仓库卡慢的解决方法
  10. mysql 利用触发器(Trigger)让代码更简单
  11. arch linux添加用户,Users and groups (简体中文)
  12. 4.7 什么是深度卷积网络?
  13. 0.python class
  14. 在Kali Linux上安装LOIC
  15. Unity-粒子特效
  16. 流量计算机标准,-流量计执行标准
  17. Scylladb学习笔记
  18. 参考文献中英文人名_参考文献英文名字应该怎么写?
  19. 武安学计算机的学校哪个好,在武安职教中心学习计算机。对口哪些大学。
  20. 奶茶果茶饮品店数字化转型| 奶茶店小程序 | 餐饮外卖系统

热门文章

  1. Centos7环境下编译安装Mysql
  2. windows常用快捷命令
  3. Android 获取控件滑动速度,速度跟踪器VelocityTracker;
  4. 【转帖】超详细的 Vagrant 上手指南
  5. 磁盘使用率达到100%
  6. iOS OpenGL 纹理坐标详解
  7. Java的强制类型转换
  8. 让input框只输入英文
  9. java中的static变量初始化_Java初始化静态变量的时间顺序
  10. Redis Ehcache Memcached 应用场景