Java List 学习记录

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();
		// 如果列表包含指定的元素,则返回true
		list.contains("nxj");
		// 如果列表包含指定 collection 的所有元素,则返回 true
		list.containsAll(new ArrayList());
		// 比较指定的对象与列表是否相等
		list.equals(new ArrayList());
		// 返回列表中指定位置的元素
		list.get(0);
		// 返回列表的哈希码值
		list.hashCode();
		// 返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1
		list.indexOf("lwc");
		// 返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回 -1
		list.lastIndexOf("lwc");
		// 如果列表不包含元素,则返回 true
		list.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 && setter
  public 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;
  }
  @Override
  public String toString() {
    return "User [name=" + name + ", age=" + age + "]";
  }
 
  @Override
  public 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>() {
        @Override
        public 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++) { // 遍历list1
            boolean 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());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值