JAVAlistCD的简单介绍

博主:adminadmin 2022-11-23 17:16:06 60

今天给各位分享JAVAlistCD的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java中如何去除List中的重复的值

你要去除的值是基本数据类型还是对象呢?

如果不想存重复数据何不用Set呢。。。

其实吧。。在知道上提问不如在网页上查。。这个是我查到的第一个。。网页里的内容,他一共使用了3种方式

最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。

但是赋给set集合后,由于set集合是无序的,原先的顺序就打乱了。所以我又想着能不能用set的特性进行去重又不打乱顺序呢?

试了一下,也是可以的,几种方法在不同情况下都有各自的优势。现在将代码写出来,比较一下。

//set集合去重,不打乱顺序

public static void main(String[] args){

ListString list = new ArrayListString();

list.add("aaa");

list.add("bbb");

list.add("aaa");

list.add("aba");

list.add("aaa");

Set set = new HashSet();

List newList = new ArrayList();

for (String cd:list) {

if(set.add(cd)){

newList.add(cd);

}

}

System.out.println( "去重后的集合: " + newList);

}123456789101112131415161718

//遍历后判断赋给另一个list集合

public static void main(String[] args){

ListString list = new ArrayListString();

list.add("aaa");

list.add("bbb");

list.add("aaa");

list.add("aba");

list.add("aaa");

ListString newList = new ArrayListString();

for (String cd:list) {

if(!newList.contains(cd)){

newList.add(cd);

}

}

System.out.println( "去重后的集合: " + newList);

}1234567891011121314151617

//set去重

public static void main(String[] args){

ListString list = new ArrayListString();

list.add("aaa");

list.add("bbb");

list.add("aaa");

list.add("aba");

list.add("aaa");

Set set = new HashSet();

List newList = new ArrayList();

set.addAll(list);

newList.addAll(set);

System.out.println( "去重后的集合: " + newList);

}12345678910111213141516

//set去重(缩减为一行)

public static void main(String[] args){

ListString list = new ArrayListString();

list.add("aaa");

list.add("bbb");

list.add("aaa");

list.add("aba");

list.add("aaa");

List newList = new ArrayList(new HashSet(list));

System.out.println( "去重后的集合: " + newList);

}12345678910111213

hashset不进行排序,还有一种方法是用treeset,去重并且按照自然顺序排列,将hashset改为treeset就可以了。(原本的顺序是改变的,只是按照字母表顺序排列而已)

//去重并且按照自然顺序排列

List newList = new ArrayList(new TreeSet(list));

Java中list如何利用遍历进行删除操作

方法有很多,比如可以在for和foreach 等循环遍历,然后删除,

下面在介绍两种方案. 第一种.迭代循环, 然后删除. 第二种java8开始的流操作

import java.util.*;

import java.util.stream.Collectors;

public class MyListDemo {

public static void main(String[] args) {

test1(); //传统方法

test2(); // java8开始的新方法

}

// 传统的方法

public static void test1() {

// 创建一个list类

ListString list = new ArrayList(Arrays.asList("ab", "cd", "11", "ef"));

// 迭代遍历查找

IteratorString it = list.iterator();

while (it.hasNext()) {

String x = it.next();

if (x.equals("11")) {

it.remove(); // 用迭代器删除

}

}

System.out.println(list);

}

//下面是 JAVA8的处理方式

private static void test2() {

ListString list2=new ArrayList(Arrays.asList("ab","cd","11","ef"));

ListString list3=list2

.stream() //得到流,准备进行流处理

.filter(x-!x.equals("11")) // 过滤掉等于"11"的元素

.collect(Collectors.toList()); // 收集起来

System.out.println(list3);

}

}

JAVA中list排序问题

分不多,不过正好我研究了这里,也算给自己做个总结:

我为了方便解释、写了一个测试类

/** test for reflex */

public class Model {

private String name;

private String content;

public Model(){

this.name = "my name";

this.content = "a long text";

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public String getContent() {

return content;

}

//测试

public void test() throws Exception{

Model model = new Model();

Method m1 = model.getClass().getMethod("getName", null);

System.out.println(m1.invoke(model, null));

}

public static void main(String args[]){

try {

new Model().test("getName");

} catch (Exception e) {

e.printStackTrace();

}

}

}

首先调用test,传递一个method过去;

通过反射机制(这里用到了getMethod、invoke,我比较喜欢getField)、获取到m1对象的getName方法,getMethod第一个参数为方法名、第二个是给这个method的参数的类型,

If parameterTypes is null, it is treated as if it were an empty array,如果为null,表示没有参数;(即 getName()方法);

然后在通过 invoke 注入参数;第一个是相应对象的引用、第二个是参数值(刚刚的是类型,现在才是值);

If the underlying method is static, then the specified obj argument is ignored. It may be null,也就是说static的方法第一个参数是null;

我们要调用的是getName(),那么就是 m1.invoke(model,null)了;

执行结果为:my name ;相当于调用了getName()方法.

绕了一圈也就是 model.getName() == model.getClass().getMethod("getName",null).invoke(model,null);

对于有参数的,调整为

public void test(String method) throws Exception{

Model model = new Model();

Method m1 = model.getClass().getMethod(method, String.class);

m1.invoke(model, "can you");

System.out.println(model.getName());

}

结果:can you

接下来上边的题目就简单了,

public void Sort(ListE list, final String method, final String sort){

这里给出了method,接下来是一个内部类的处理;自定义一个comparator,

Method m1 = ((E) a).getClass().getMethod(method, null);

这里就是获取method方法,他没有参数。

m1.invoke(((E)a), null).toString()

这里是得到对象a调用方法method之后的返回值。

ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());

而这里就是比较两个对象method方法的返回值

将ret交给sort进行排序;

就像3楼说的、真正排序的是sort方法,下面的只是对一个类中某个方法的返回值进行比较

JAVAlistCD的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、JAVAlistCD的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-23,除非注明,否则均为首码项目网原创文章,转载请注明出处。