JAVA小筆記-List

Java中List使用

基礎概念

List:繼承Collection,List元素是有序的,因爲List有索引因此元素能夠重複。經常使用的實現類有ArrayList(數據結構使用數組,查詢速度快,增刪很慢,線程不一樣步),LinkedList(數據結構使用鏈表,查詢很慢,增刪較快),Vector(數據結構使用數組,查詢和增刪都較慢,基本被ArrayList替代)。java

List<Object>去重

  • List<String> 去重

使用Set去重數組

Set<Integer> set = new HashSet<>(list);

②用JDK1.8 Stream中對List進行去重,首先得到此list的Stream.而後調用distinct()方法,java8中提供流的方式對數據進行處理,很是快,底層用的是forkJoin框架,提供了並行處理,使得多個處理器同時處理流中的數據,因此耗時很是短。數據結構

List<String> unique = list.stream().distinct().collect(Collectors.toList());
  • List<User>去重
private Integer id;
    private String userName;
    private Integer age;
    private String address;

重寫equals()和hashcode()框架

@Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (address == null) {
            if (other.address != null)
                return false;
        } else if (!address.equals(other.address))
            return false;
        if (age == null) {
            if (other.age != null)
                return false;
        } else if (!age.equals(other.age))
            return false;
        if (userName == null) {
            if (other.userName != null)
                return false;
        } else if (!userName.equals(other.userName))
            return false;
        return true;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((address == null) ? 0 : address.hashCode());
        result = prime * result + ((age == null) ? 0 : age.hashCode());
        result = prime * result + ((userName == null) ? 0 : userName.hashCode());
        return result;
    }
public class Test {
    public static void main(String[] args) {
        User u1=new User(1,"aaa",1,"shanghai");
        User u2=new User(2,"bbb",2,"beijing");
        User u3=new User(1,"aaa",1,"shanghai");
        List<User> list=new ArrayList<User>();
        List<User> personList =new ArrayList<User>();
        list.add(u1);
        list.add(u2);
        list.add(u3);
         // 去重
        list.stream().forEach(
                u -> {
                    if (!personList.contains(u)) {
                        personList.add(u);
                    }
                }
        );
        System.out.println(personList);         
    }

還有一種比較炫酷的寫法。dom

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;

import static java.util.Comparator.comparingInt;
import static java.util.stream.Collectors.toCollection;
import static java.util.stream.Collectors.collectingAndThen;


public class Test {
    public static void main(String[] args) {
        User u1=new User(1,"aaa",1,"shanghai");
        User u2=new User(2,"bbb",2,"beijing");
        User u3=new User(1,"aaa",1,"shanghai");
        List<User> list=new ArrayList<User>();
        list.add(u1);
        list.add(u2);
        list.add(u3);
         // 去重
         List<User> unique = list.stream().collect(
                    collectingAndThen(
                            toCollection(() -> new TreeSet<>(comparingInt(User::getId))), ArrayList::new)
            );
        System.out.println(unique);     
    }
}

過濾指定對象或屬性

public class Test {
    public static void main(String[] args) throws Exception{
        User u1=new User("aaa","ds",22);
        User u2=new User("asa","qdfdss",23);
        User u3=new User("sd","sdsdv",24);
        User u4=new User("as","fds",23);
        User u5=new User("rfd","fds",26);
        User u6=new User("aaa","gbfdv");
        List<User> list=new ArrayList<>();
        list.add(u1);
        list.add(u2);
        list.add(u3);
        list.add(u4);
        list.add(u5);
        list.add(u6);
        List<User> list2=new ArrayList<>();

        //獲取指定屬性的集合
        List<Integer> collect = list.stream()
                .map(User::getAge).filter(x -> x ==23).collect(Collectors.toList());
        System.out.println(JSON.toJSON(collect));

        //獲取指定的對象集合
        list.stream().forEach(
                u -> {
                    if (u.getAge()==null) {
                        list2.add(u);
                    }
                }
        );
        System.out.println(JSON.toJSON(list2));

        List<User> list3 = list.stream()
                .filter(user -> "aaa".equals(user.getName()))
                .collect(Collectors.toList());
        System.out.println(JSON.toJSON(list3));
    }

}

List<Object>排序

public class User implements Comparable<User>{
    ...
    @Override
    public int compareTo(User o) {
        return this.id.compareTo(o.getId());
    }
}
    list.sort(Comparator.naturalOrder());
    Collections.sort(list);

List使用

  • 14我的圍成一圈,從第1我的開始報數1,2,3。每數到3的人離開圈子,最後剩下的人是幾號?
public class Test {
    public static void main(String[] args) {
        List<Integer> list=new ArrayList<Integer>();
        for(int i=0;i<14;i++) {
            list.add(i+1);            
        }
         int m = 0;  
            while(list.size() > 1) {  
                for (int j=0; j<list.size(); j++) {  
                    m++;  
                    if (m%3 == 0) {  
                        System.out.println(list.remove(j)+"號離開");  
                        j--;  
                        m = 0;    
                    }     
                }     
            }  
            System.out.println(list);     
    }
}
  • 一個箱子有50個球從1依從編號,每次從箱子裏隨機取兩個球分紅一組,求每組成員編號?
public class Test {
    public static void main(String[] args) {
        List<String> list=getList();
        int length = 0,index,index2;
        Random random=new Random();
        for(int i=0;i<25;i++) {        
            while(true) {                
                index=random.nextInt(50-length);            
                index2=random.nextInt(50-length);
                if(index!=index2) {
                    break;
                }
            }        
            System.out.println("第"+i+"組:"+list.get(index)+","+list.get(index2));    
            list.remove(index);
            if(index>index2){
                list.remove(index2);
            }else {
                list.remove(index2-1);
            }
            length=length+2;                
        }        
    }
    
    public static List<String> getList() {
        List<String> list=new ArrayList<String>();
        for(int i=0;i<50;i++) {
            list.add(i+1+"");
        }
        return list;
    }
}
相關文章
相關標籤/搜索