导航:首页 > 编程语言 > java里面linklist如何实现排序

java里面linklist如何实现排序

发布时间:2023-04-11 13:06:32

1. java 怎么将List里面数据排序

不好意思,上午只是粗略地看了一下,没有细致看,现在详细回答你的提问。


ArrayList底层是用一个长度为10的Object数组实现,不管添加进去什么类型的数据,都会转换成Object对象,除非你用很早以前的JDK版本。这样就好理解了,像你写的程序arrayList1中add了String和Integer两种类型的数据,这两类对象没有什么可比性,就像拿打火机和U盘比一个性质。所以,是没有办法进行直接排序的。


你要求的是要按ArrayList里面的第1、2、4数据进行排序,这个可以。


先来arrayList1

四个数据分别是2、"daas"、6、"1",第1、2、4数据即2、“daas”、“1”,我选择按照String类型进行排序,所以第1个数据2转换成String类型即可。因为第3个数据6不进行排序,remove就好。这是个题还是个什么,其实还是留了点活路的,因为后面的(你arrayList234下面)代码都是往arrayList1中添加的,而且还都是String类型。这也是我选择String类型进行排序的原因。代码如下:

List arrayList1 = new ArrayList();

arrayList1.add(2); //0

arrayList1.add("daas"); //1

arrayList1.add(6); //2

arrayList1.add("1"); //3

list.add(arrayList1);

//my code

String convert = String.valueOf(arrayList1.get(0));

arrayList1.remove(2);

arrayList1.remove(0);

arrayList1.add(convert);

/此处为你的arrayList234代码

Collections.sort(arrayList1);

for(int i = 0; i < arrayList1.size(); i++) {

System.out.println(arrayList1.get(i));

}

结果为:

1

2

3

5

8

daas


因为怕你深挖,强调两点:

第一点,由结果看出Collections.sort(arrayList1),是以String的ASCII码进行排序的,为了证明这一点,就要看原代码,这时你就会发现JDK中String的compareTo方法是个空实现,底层并不是用java写的,这点没事,我们可以用一定的方法让它把特征暴露出来,然后就可以理解思想。你看我下面写的小测试程序就会明白。

String a = new String("Z");

String b = new String("A");

System.out.println(a.compareTo(b));

String c = new String("A");

String d = new String("B");

System.out.println(c.compareTo(d));

//看结果,证明String的自然顺序比较即比较ASCII值,只是第一步。

//看结果,证明compareTo返回值是后面的ASCII码减支前面的ASCII码,第二步。

String e = new String("g");

String f = new String("e");

String h = new String("h");

List<String> list = new ArrayList<String>();

list.add(e);

list.add(f);

list.add(h);

Collections.sort(list);

for(String i : list) {

System.out.println(i);

}

结果为:

25

-1

e

g

h

//证明String的自然排序即ASCII码从小到大排序,最后一步。


第二点,你的要求是“要按ArrayList里面的第1、2.4数据进行排序,分别怎么做啊”,这个问题的描述有问题,或者不详细,arryList2、arrayList3、arrayList4任何一个里面一共就add了3个数据,哪来第4个。如果是分别对arrayList234里面的数据进行排序,两个选择,(1)把所有Integer转换成String类型,再排序,参考arrayList2。(2)运用Integer.valueOf()方法,将内容为数字的String数据转换成Integer,把原来的remove掉,把内容非数字的String数据remove掉,再排序,桶排序、冒泡排序、快速排序等你随便选。


讲解到这,不管想对哪个list进行排序,你应该都会写了。


总结:

  1. 除非比较ASCII码,Integer类型和内容为非数字的String类型数据是没有办法进行比较的,不管是直接比较,还是间接比较。还是上面那句话,像打火机和U盘没有可比性一样,理解这点很重要。

  2. 即使用Integer.valueOf()方法对内容为非数字的String类型数据进行转换没有用,会报NumberFormatException。说这点意思是如果你想按Integer类型排序,得把所有内容为非数字的String类型数据remove掉。


题外话:这种类型的题我记得上大学的时候有,不知道你是不是学生,今天想来,其实用处真不大,都用泛型,现在写代码不用泛型的程序员几乎是完全不存在了。


祝心情愉快~~


亲手打,如果满意,把分给我吧~~哈哈。。

2. Java的List怎么排序啊

用Collections.sort就可以排序,
里面的排序是默认的按自然顺序排列
也就是1,2,3,4这种
参数要求实专现了Comparable的数据才能属排序,
如果你自己写的类,你就要实现Comparable接口,然后在接口里面自动生成的方法里面
指定排序方法,一般的String Inteneger类都是实现了这个接口的 不用自己操作的。
你可以取看源代码

3. 关于java list的排序问题

楼上你可以用用linkedhashmap来存放对象 这样就可以按照你放的顺序输出了。

TreeMap的顺序是自然顺序(如整数从小到大),也可以指定比较函数。但不是插入的顺序。

LinkedHashMap吧。它内部有一个链表,保持插入的顺序。迭代的时候,也是按照插入顺序迭代,而且迭代比HashMap快。

4. java ArrayList和LinkedList排序问题

对List<Integer>内容排序实现很简单的哦,jdk自带了实现排序的接口:Colleactions.sort(List<Integer>);
直接把你的List放进去,你的List就被排序了,亲。
有什么问题都可以追问我,没问题,望采纳,谢谢!

5. java中list排序

第一种方法,就是list中对象实现Comparable接口,代码如下:

public class Person implements Comparable<Person> {
private String name;
private Integer order;

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the order
*/
public Integer getOrder() {
return order;
}

/**
* @param order
* the order to set
*/
public void setOrder(Integer order) {
this.order = order;
}

@Override
public int compareTo(Person arg0) {
return this.getOrder().compareTo(arg0.getOrder());
}

}

public static void main(String[] args) {
List<Person> listA = new ArrayList<Person>();
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();

p1.setName("name1");
p1.setOrder(1);
p2.setName("name2");
p2.setOrder(2);
p3.setName("name3");
p3.setOrder(3);

listA.add(p2);
listA.add(p1);
listA.add(p3);
Collections.sort(listA);
for (Person p : listA) {
System.out.println(p.getName());
}
}

第二种方法,就是在重载Collections.sort方法,代码如下:

public class Person {
private String name;
private Integer order;

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the order
*/
public Integer getOrder() {
return order;
}

/**
* @param order
* the order to set
*/
public void setOrder(Integer order) {
this.order = order;
}

}

public static void main(String[] args) {
List<Person> listA = new ArrayList<Person>();
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();

p1.setName("name1");
p1.setOrder(1);
p2.setName("name2");
p2.setOrder(2);
p3.setName("name3");
p3.setOrder(3);

listA.add(p2);
listA.add(p1);
listA.add(p3);

Collections.sort(listA, new Comparator<Person>() {
public int compare(Person arg0, Person arg1) {
return arg0.getOrder().compareTo(arg1.getOrder());
}
});

for (Person p : listA) {
System.out.println(p.getName());
}
}

两次执行的结果都是:

name1

name2

name3

阅读全文

与java里面linklist如何实现排序相关的资料

热点内容
maya粒子表达式教程 浏览:84
抖音小视频如何挂app 浏览:283
cad怎么设置替补文件 浏览:790
win10启动文件是空的 浏览:397
jk网站有哪些 浏览:134
学编程和3d哪个更好 浏览:932
win10移动硬盘文件无法打开 浏览:385
文件名是乱码还删不掉 浏览:643
苹果键盘怎么打开任务管理器 浏览:437
手机桌面文件名字大全 浏览:334
tplink默认无线密码是多少 浏览:33
ipaddgm文件 浏览:99
lua语言编程用哪个平台 浏览:272
政采云如何导出pdf投标文件 浏览:529
php获取postjson数据 浏览:551
javatimetask 浏览:16
编程的话要什么证件 浏览:94
钱脉通微信多开 浏览:878
中学生学编程哪个培训机构好 浏览:852
荣耀路由TV设置文件共享错误 浏览:525

友情链接