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;
    }
}
相关文章
相关标签/搜索