list 订阅
list是一个计算机专业术语,在编程语言中List 是类库中的一个类,可以简单视之为双向连结串行,以线性列的方式管理物件集合。 展开全文
list是一个计算机专业术语,在编程语言中List 是类库中的一个类,可以简单视之为双向连结串行,以线性列的方式管理物件集合。
信息
类    型
计算机专业术语
区别于
vector
中文名
list
一般定义
一览表; 明细表; 目录; 名单
list一般定义
一览表; 明细表; 目录; 名[清、价目]单list 的特色是在集合的任何位置增加或删除元素都很快,但是不支持随机存取。list 是类库提供的众多容器(container)之一,除此之外还有vector、set、map、…等等。list 以模板方式实现(即泛型),可以处理任意型别的变量,包括使用者自定义的资料型态
收起全文
精华内容
参与话题
问答
  • 实现集合List中的元素进行排序

    万次阅读 多人点赞 2016-06-14 22:08:32
    Collections对List集合中的数据进行排序 有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到 Java中提供的对集合进行操作的工具类Collections,其中的sort方法 先看一个简单的例子: public static ...

     

    Collections对List集合中的数据进行排序

    有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到

     

    Java中提供的对集合进行操作的工具类Collections,其中的sort方法

     

    先看一个简单的例子:

     

    public static void main(String[] args) {
    	List<Integer> nums = new ArrayList<Integer>();
    		nums.add(3);
    		nums.add(5);
    		nums.add(1);
    		nums.add(0);
    		System.out.println(nums);
    		Collections.sort(nums);
    		System.out.println(nums);
    }

    输出结果:
    [3, 5, 1, 0]
    [0, 1, 3, 5]

     

    稍微复杂的List里面放一个复杂的对象

     

    package core.java.collection.collections;
    
    public class User implements Comparable<User>{
    	
    	private int score;
    	
    	private int age;
    	
    	public User(int score, int age){
    		super();
    		this.score = score;
    		this.age = age;
    	}
    
    	public int getScore() {
    		return score;
    	}
    
    	public void setScore(int score) {
    		this.score = score;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	@Override
    	public int compareTo(User o) {
    		int i = this.getAge() - o.getAge();//先按照年龄排序
    		if(i == 0){
    			return this.score - o.getScore();//如果年龄相等了再用分数进行排序
    		}
    		return i;
    	}
    	
    }
    
    public static void main(String[] args) {
    		List<User> users = new ArrayList<User>();
    		users.add(new User(78, 26));
    		users.add(new User(67, 23));
    		users.add(new User(34, 56));
    		users.add(new User(55, 23));
    		Collections.sort(users);
    		for(User user : users){
    			System.out.println(user.getScore() + "," + user.getAge());
    		}
    }

    输出结果:
    55,23
    67,23
    78,26
    34,56
    我们会发现sort(List<T>)方法中List中的T必须实现Comparable<T>接口,然后实现
    compareTo()方法,该方法的返回值0代表相等,1表示大于,-1表示小于;为什么
    在简单例子中没有看到实现Comparable接口呢?是因为Integer类其实自己已经实现
    了Comparable接口,Java已经给我们做好了。

    Collections提供的第二种排序方法sort(List<T> list, Comparator<? super T> c)
    先看例子:

    package core.java.collection.collections;
    
    public class Students {
    	
    	private int age;
    	private int score;
    	
    	public Students(int age, int score){
    		super();
    		this.age = age;
    		this.score = score;
    	}
    	
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public int getScore() {
    		return score;
    	}
    	public void setScore(int score) {
    		this.score = score;
    	}
    }
    public static void main(String[] args) {
    		List<Students> students = new ArrayList<Students>();
    		students.add(new Students(23, 100));
    		students.add(new Students(27, 98));
    		students.add(new Students(29, 99));
    		students.add(new Students(29, 98));
    		students.add(new Students(22, 89));
    		Collections.sort(students, new Comparator<Students>() {
    
    			@Override
    			public int compare(Students o1, Students o2) {
    				int i = o1.getScore() - o2.getScore();
    				if(i == 0){
    					return o1.getAge() - o2.getAge();
    				}
    				return i;
    			}
    		});
    		for(Students stu : students){
    			System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
    		}
    }

    输出结果:
    score:89:age22
    score:98:age27
    score:98:age29
    score:99:age29
    score:100:age23

    从上面的例子我们可以看出Students类没有实现Comparable<T>接口,只是在sort()方法
    中多传入一个参数,只不过该参数是一个接口我们需要实现其compare方法。

    以上就是是Java中Colelctions工具类为我们提供的两种集合排序方法。

     

     

    展开全文
  • list去重,根据对象某个属性、某几个属性去重 去除List中重复的String List unique = list.stream().distinct().collect(Collectors.toList()); 去除List中重复的对象 // Person 对象 public class ...

    list去重,根据对象某个属性、某几个属性去重

    去除List中重复的String

    List unique = list.stream().distinct().collect(Collectors.toList());

    去除List中重复的对象

    // Person 对象
    public class Person {
        private String id;
        
        private String name;
        
        private String sex;
    
        <!--省略 get set-->
    }
    
    // 根据name去重
    List<Person> unique = persons.stream().collect(
                Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getName))), ArrayList::new)
    );
    
    
    // 根据name,sex两个属性去重
    List<Person> unique = persons.stream().collect(
               Collectors. collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getName() + ";" + o.getSex()))), ArrayList::new)
    );
    

    filter()过滤列表

    List<Person> filterList = persons.stream().filter(p -> p.getSex().equals(1)).collect(Collectors.toList());
    
    
    List转Map

    从一个Person对象的List集合,取出idname组成一个map集合

    Map<String, String> collect = list.stream().collect(Collectors.toMap(p -> p.getId(), p -> p.getName()));
    
    从 List 中取出某个属性的组成 list 集合
    //1.提取出list对象中的一个属性
    List<String> stIdList1 = stuList.stream().map(Person::getId).collect(Collectors.toList());
    
    //2.提取出list对象中的一个属性并去重
    List<String> stIdList2 = stuList.stream().map(Person::getId).distinct().collect(Collectors.toList());
    
    展开全文
  • pandas DataFrame数据转为list

    万次阅读 多人点赞 2017-05-21 22:46:10
    首先使用np.array()函数把DataFrame转化为np.ndarray(),再利用tolist()函数把np.ndarray()转为list,示例代码如下:# -*- coding:utf-8-*- import numpy as np import pandas as pddata_x = pd.read_csv("E:/...

    首先使用np.array()函数把DataFrame转化为np.ndarray(),再利用tolist()函数把np.ndarray()转为list,示例代码如下:

    # -*- coding:utf-8-*-
    import numpy as np
    import pandas as pd
    
    data_x = pd.read_csv("E:/Tianchi/result/features.csv",usecols=[2,3,4])#pd.dataframe
    data_y =  pd.read_csv("E:/Tianchi/result/features.csv",usecols=[5])
    
    train_data = np.array(data_x)#np.ndarray()
    train_x_list=train_data.tolist()#list
    print(train_x_list)
    print(type(train_x_list))
    
    展开全文
  • Java数组转List的三种方式及对比

    万次阅读 多人点赞 2018-03-18 00:10:04
    本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。

    前言:

    本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。

    一.最常见方式(未必最佳)

    通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。

    关键代码List list = Arrays.asList(strArray);

    private void testArrayCastToListError() {
    		String[] strArray = new String[2];
    		List list = Arrays.asList(strArray);
    		//对转换后的list插入一条数据
    		list.add("1");
    		System.out.println(list);
    	}
    

    执行结果

    Exception in thread "main" java.lang.UnsupportedOperationException
    	at java.util.AbstractList.add(AbstractList.java:148)
    	at java.util.AbstractList.add(AbstractList.java:108)
    	at com.darwin.junit.Calculator.testArrayCastToList(Calculator.java:19)
    	at com.darwin.junit.Calculator.main(Calculator.java:44)
    

    程序在list.add(“1”)处,抛出异常:UnsupportedOperationException。

    原因解析
    Arrays.asList(strArray)返回值是java.util.Arrays类中一个私有静态内部类java.util.Arrays.ArrayList,它并非java.util.ArrayList类。java.util.Arrays.ArrayList类具有 set(),get(),contains()等方法,但是不具有添加add()或删除remove()方法,所以调用add()方法会报错。

    使用场景Arrays.asList(strArray)方式仅能用在将数组转换为List后,不需要增删其中的值,仅作为数据源读取使用。

    二.数组转为List后,支持增删改查的方式

    通过ArrayList的构造器,将Arrays.asList(strArray)的返回值由java.util.Arrays.ArrayList转为java.util.ArrayList

    关键代码ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;

    private void testArrayCastToListRight() {
    		String[] strArray = new String[2];
    		ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;
    		list.add("1");
    		System.out.println(list);
    	}
    

    执行结果:成功追加一个元素“1”。

    [null, null, 1]
    

    使用场景:需要在将数组转换为List后,对List进行增删改查操作,在List的数据量不大的情况下,可以使用。

    三.通过集合工具类Collections.addAll()方法(最高效)

    通过Collections.addAll(arrayList, strArray)方式转换,根据数组的长度创建一个长度相同的List,然后通过Collections.addAll()方法,将数组中的元素转为二进制,然后添加到List中,这是最高效的方法。

    关键代码

    ArrayList< String> arrayList = new ArrayList<String>(strArray.length);
    Collections.addAll(arrayList, strArray);
    

    测试:

    private void testArrayCastToListEfficient(){
    		String[] strArray = new String[2];
    		ArrayList< String> arrayList = new ArrayList<String>(strArray.length);
    		Collections.addAll(arrayList, strArray);
    		arrayList.add("1");
    		System.out.println(arrayList);
    	}
    

    执行结果:同样成功追加一个元素“1”。

    [null, null, 1]
    

    使用场景:需要在将数组转换为List后,对List进行增删改查操作,在List的数据量巨大的情况下,优先使用,可以提高操作速度。

    注:附上Collections.addAll()方法源码:

    public static <T> boolean addAll(Collection<? super T> c, T... elements) {
            boolean result = false;
            for (T element : elements)
                result |= c.add(element);//result和c.add(element)按位或运算,然后赋值给result
            return result;
        }
    

    四.Java8可通过stream流将3种基本类型数组转为List

    如果JDK版本在1.8以上,可以使用流stream来将下列3种数组快速转为List,分别是int[]long[]double[],其他数据类型比如short[]byte[]char[],在JDK1.8中暂不支持。由于这只是一种常用方法的封装,不再纳入一种崭新的数组转List方式,暂时算是java流送给我们的常用工具方法吧。

    转换代码示例如下:

    List<Integer> intList= Arrays.stream(new int[] { 1, 2, 3, }).boxed().collect(Collectors.toList());
    List<Long> longList= Arrays.stream(new long[] { 1, 2, 3 }).boxed().collect(Collectors.toList());
    List<Double> doubleList= Arrays.stream(new double[] { 1, 2, 3 }).boxed().collect(Collectors.toList());
    

    如果是String数组,可以使用Stream流这样转换:

    String[] arrays = {"tom", "jack", "kate"};
    List<String> stringList= Stream.of(arrays).collect(Collectors.toList());
    

    --------------------------------------正文结束,以下是对评论中的问题集中回复和讲解--------------------------------------


    补充:回答评论中的疑问

    问题: 有评论提出:数组类型如果是整型数组,转为List时,会报错?

    答案:JDK1.8环境中测试,这三种转换方式是没有问题的。放心使用。对于Integer[]整型数组转List的方法和测试结果如下:

    1. 方式一:不支持增删
    Integer[] intArray1 = new Integer[2];
    List<Integer> list1 = Arrays.asList(intArray1);
    System.out.println(list1);
    

    运行结果:

    [null, null]
    
    1. 方式二:支持增删
    Integer[] intArray2 = new Integer[2];
    List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(intArray2)) ;
    list2.add(2);
    System.out.println(list2);
    

    运行结果:

    [null, null, 2]
    
    1. 方式三:支持增删,且数据量大最高效
    Integer[] intArray3 = new Integer[2];
    List<Integer> list3 = new ArrayList<Integer>(intArray3.length);
    Collections.addAll(list3, intArray3);
    list3.add(3);
    System.out.println(list3);
    

    运行结果:

    [null, null, 3]
    

    综上,整型Integer[]数组转List<Integer>的正确方式应该是这样的。

    猜想你们遇到的问题: 由于评论没有给出报错的代码,所以我猜想你们出现的错误可能是这样转换的:

    int[] intArray1 = new int[2];
    List<Integer> list1 = Arrays.asList(intArray1);//此处报错!!!
    

    报错原因:等号两边类型不一致,当然编译不通过。分析见下文。

    那么在声明数组时,用int[] 还是Integer[],哪种声明方式才能正确的转为List呢?
    答案: 只能用Integer[]List<Integer>,即只能用基本数据类型的包装类型,才能直接转为List

    原因分析如下:

    我们来看List在Java源码中的定义(别害怕看不懂源码,看我分析,很易懂的):

    public interface List<E> extends Collection<E> {省略…}
    

    再来看Arrays.asList()的在Java源码定义:

     public static <T> List<T> asList(T... a) {
            return new ArrayList<>(a);
        }
    
    • 从上述源码中可以看出,List声明时,需要传递一个泛型<E>作为形参,asList()参数类型也是泛型中的通配类型<T>Java中所有的泛型必须是引用类型

    • 什么是引用类型?Integer是引用类型,那int是什么类型?int是基本数据类型,不是引用类型。这就是为什么java中没有List<int>,而只有List<Integer>

    • 举一反三:其他8种基本数据类型byte、short、int、long、float、double、char都不是引用类型,所以8种基本数据类型都不能作为List的形参。但String、数组、class、interface是引用类型,都可以作为List的形参,所以存在List<Runnable>接口类型的集合、List<int[]>数组类型的集合、List<String>类的集合。但不存在list<byte>list<short> 等基本类型的集合。

    有了上述基础知识后,再来看为什么下面两行代码第二行能编译通过,第三行却编译报错?

    int[] intArray1 = new int[1]; 
    Arrays.asList(intArray1);//编译不报错
    List<Integer> list1 = Arrays.asList( intArray1);//编译报错
    

    答案:

    • 第二行代码,Arrays.asList()方法的入参是个引用类型的int[],那么返回值类型一定是List<int[]> ,其完整代码是:List<int[]> intsArray = Arrays.asList(intArray1);,所以编译通过,没问题。
    • 第三行报错,因为等号两边的类型不一致,左边:List<Integer>,右边List<int[]>,所以编译时就报错。

    总结

    现在你应该明白,为什么int[]不能直接转换为List<Integer>,而Integer[]就可以转换为List<Integer>了吧。因为List中的泛型必须是引用类型,int是基本数据类型,不是引用类型,但int的包装类型Integerclass类型,属于引用类型,所以Integer可以作为List形参,List<Integer>在java中是可以存在的,但不存在List<int>类型。

    在编码时,我们不光要知其然,还要知其所以然,通过分析JDK源码,才能得出一手信息,不仅了解到了如何用,还能得出为何这样用。

    希望我的解答对你有帮助,有疑惑的地方,可以在文章下方评论,我会给大家解惑的,喜欢本文请点赞和收藏。

    展开全文
  • python 两个list 求交集,并集,差集

    万次阅读 多人点赞 2016-06-09 17:59:52
    在python中,数组可以用list来表示。如果有两个数组,分别要求交集,并集与差集,怎么实现比较方便呢? 当然最容易想到的是对两个数组做循环,即写两个for循环来实现。这种写法大部分同学应该都会,而且也没有太多...
  • Java编程:删除 List 元素的三种正确方法

    万次阅读 多人点赞 2016-11-30 16:44:59
    删除 List 中的元素会产生两个问题: 删除元素后 List 的元素数量会发生变化; 对 List 进行删除操作可能会产生并发问题; 我们通过代码示例演示正确的删除逻辑package com.ips.list;import java.util.ArrayList;...
  • 在实际开发中,经常会遇到需要找出(删除)一个list中某些元素的属性相同的元素,或者两个list中某些元素的属性相等的元素,这种方法很多,这里整理列出一些: 废话不说,上代码,有注释掉的你们自己看import java....
  • fastjson List转JSONArray以及JSONArray转List

    万次阅读 多人点赞 2018-05-31 11:25:54
    1.fastjson List转JSONArrayList&lt;T&gt; list = new ArrayList&lt;T&gt;();JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));2.fastjson JSONArray转ListJSONArray array = ...
  • Pandas把dataframe或series转换成list

    万次阅读 多人点赞 2019-08-12 12:25:15
    把dataframe转换为list 输入多维dataframe: df = pd.DataFrame({'a':[1,3,5,7,4,5,6,4,7,8,9], 'b':[3,5,6,2,4,6,7,8,7,8,9]}) 把a列的元素转换成list: # 方法1 df['a'].values.tolist() # 方法2 df['a']....
  • list的五种去重方法

    万次阅读 多人点赞 2018-10-31 10:12:35
    面试中经常被问到的list如何去重,一般是口述,不需要代码体现,这个时候,思维一定要清晰,可以罗列出集中去重的方法,以展现你对list数据结构,以及相关方法的掌握,体现你的java基础学的是否牢固 下面,我就将五种方法逐一...
  • Java8新特性Stream之list转map及问题解决

    万次阅读 多人点赞 2018-10-11 14:57:44
    List集合转Map,用到的是Stream中Collectors的toMap方法:Collectors.toMap 具体用法实例如下: //声明一个List集合 List&amp;lt;Person&amp;gt; list = new ArrayList(); list.add(new Person(&...
  • 问题一:ftpusers和user_list两个文件各自的用途是什么?有何关系?首先请明确一点:ftpusers不受任何配制项的影响,它总是有效,它是一个黑名单!该文件存放的是一个禁止访问FTP的用户列表,通常为了安全考虑,管理...
  • List转Map的三种方法

    万次阅读 多人点赞 2018-04-03 13:26:33
    List转Map三种方法。
  • Mybatis 传递参数类型为List的取值问题 问题描述: 参数传递为List时: 当传递一个 List 实例或者数组作为参数对象传给 Mybatis。此时,Mybatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list...
  • unable to access android sdk add-on list

    万次阅读 多人点赞 2016-01-22 17:01:15
    你也可以查看我的其他同类文章,也会让你有一定的收货!造成这个问题的原因可能有多种,下面两种方法,我亲自测试后可用,如果都不行,请在评论里告诉我,我会尽快帮你分析解决。左侧的文章分类中,Android Studio...
  • List转JSONArray和JSONArray转List

    万次阅读 2019-08-19 20:59:33
    1.List转JSONArray List<T> list = new ArrayList<T>(); JSONArray array= JSONArray.parseArray(JSON.toJSONString(list)); 2.JSONArray转List JSONArray array = new JSONArray(); List<...
  • 【Java面试题】List如何一边遍历,一边删除?

    万次阅读 多人点赞 2020-03-20 12:10:36
    List如何一边遍历,一边删除?
  • 以下两种情况都会出现此错误: points = [ [1, 2], ...list的维数必须一致:正确写法: points = [ [1, 2], [0, 4], [2, 0] ] 这个也会报错: stations = ['Schagen', 'Heerhugow...
  • Java中List的详细用法

    万次阅读 多人点赞 2018-09-11 16:36:43
    list中添加,获取,删除元素; list中是否包含某个元素; list中根据索引将元素数值改变(替换); list中查看(判断)元素的索引; 根据元素索引位置进行的判断; 利用list中索引位置重新生成一个新的list(截取...
  • list stream:计算对象List中某个字段的总和

    万次阅读 多人点赞 2019-03-17 02:29:21
    计算一个number类型的List对象总和 Integer[] integerArray = {1, 3, 5, 10, 18}; List&lt;Integer&gt; list = new ArrayList&lt;&gt;(Arrays.asList(integerArray)); IntSummaryStatistics ...
  • java怎么获取list长度

    万次阅读 多人点赞 2018-06-19 20:08:38
    java 怎么获取list长度java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()...
  • python中list与string的转换

    万次阅读 多人点赞 2019-05-15 13:00:14
    1.list转string 命令:''.join(list) 其中,引号中是字符之间的分割符,如“,”,“;”,“\t”等等 如: list = [1, 2, 3, 4, 5] ''.join(list) 结果即为:12345 ','.join(list) 结果即为:1,2,3,4,5 str=...
  • vsftpd 配置:chroot_local_user与chroot_list_enable详解

    万次阅读 多人点赞 2015-01-05 09:24:38
    很多情况下,我们希望限制ftp用户只能在其主目录下(root dir)下活动,不允许他们跳出主目录之外浏览服务器上的其他目录,这时候我就需要使用到chroot_local_user,chroot_list_enable,chroot_list_file这三个选项了...
  • Python中如何求列表list的平均数

    万次阅读 多人点赞 2019-09-28 10:12:07
    Python中如何求列表list的平均数 当列表list中只包含数字时,如何求取它的平均数: from numpy import * a = [52,69,35,65,89,15,34] b = mean(a) print(b) 运行结果: 51.285714285714285 ...
  • List排序

    万次阅读 2019-10-13 19:51:21
    List<bean>排序 前言: 对List中的所有bean进行排序 ,排序主要是利用JDK自带的 Collections.sort; 代码如下: 这是一个运用Demo: public class MyCompareSort { public static void peopleSort...
  • 将Object转换成List

    万次阅读 2019-08-27 20:01:29
    java中如果需要将一个object转成list,大部分人会直接使用强制类型转换:(List<String>) obj这样。这样强制转换编译会提示Unchecked cast: 'java.lang.Object' to 'java.util.List<java.lang.String>',...
  • Python判断两个list相等

    万次阅读 2018-06-04 10:45:14
    Python2可以使用cmp()函数,但是在Python3中我们可以使用下面的方法来比较两个list是否相等学习连接import operator a=[1,-1,0] b=[1,-1,0] c=[-1,1,0] print(operator.eq(a,b)) print(operator.eq(a,c))实验结果:...
  • List集合中的对象根据属性排序

    万次阅读 多人点赞 2014-11-27 11:11:02
    集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A、B、C,则取得时候,则也是A、B、C的顺序,实际场景中,有时我们需要根据自定义的规则对List中的元素进行排序,该如何实现呢?看下面小例子: ...
  • python 从list中随机取值

    万次阅读 多人点赞 2018-12-11 17:17:49
    list1 = ['佛山', '南宁', '北海', '杭州', '南昌', '厦门', '温州'] a = random.choice(list1) print(a) # 返回一个值 第二种方法 适用于随机取一组值, 返回一个list import random list1 = ['佛山', '南宁', .....
  • ListList的区别

    万次阅读 多人点赞 2020-12-19 10:02:17
    List、Set、Map中经常见到,用来限制Class中的参数类型,确保Class中参数的一致性。例如:List<String> list = new ArrayList<>();创建了一个内部参数是String类型的类,list中的操作对象都是String。...

空空如也

1 2 3 4 5 ... 20
收藏数 1,137,075
精华内容 454,830
关键字:

list