本文目录
- arrayList和linkedList在排序上的区别
- C# 关于ArrayList 排序问题
- java ArrayList排序底层是怎么实现的
- java arraylist是有序的吗
- java arraylist 按照对象的属性排序
- java ArrayList 排序
- Java Arraylist 如何使用 Comparator排序
- java ArrayList 降序排序问题
arrayList和linkedList在排序上的区别
ArrayList和LinkedList都实现了List接口,ArrayList的实现用的是数组,LinkedList是基于链表,ArrayList适合查找,LinkedList适合增删。ArrayList与LinkList两者的区别:ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。但是要删除数据却是开销很大的,因为这需要重排数组中的所有数据。2) 相对于 ArrayList , LinkedList 插入是更快的。因为 LinkedList 不像 ArrayList 一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是 ArrayList 最坏的一种情况,时间复杂度是 O(n) ,而 LinkedList 中插入或删除的时间复杂度仅为 O(1) 。 ArrayList 在插入数据时还需要更新索引(除了插入数组的尾部)。3) 类似于插入数据,删除数据时, LinkedList 也优于 ArrayList 。4) LinkedList 需要更多的内存,因为 ArrayList 的每个索引的位置是实际的数据,而 LinkedList 中的每个节点中存储的是实际的数据和前后节点的位置 ( 一个 LinkedList 实例存储了两个值: Node《E》 first 和 Node《E》 last 分别表示链表的其实节点和尾节点,每个 Node 实例存储了三个值: E item,Node next,Node pre) 。 什么场景下更适宜使用 LinkedList,而不用ArrayList1) 你的应用不会随机访问数据 。因为如果你需要LinkedList中的第n个元素的时候,你需要从第一个元素顺序数到第n个数据,然后读取数据。2) 你的应用更多的插入和删除元素,更少的读取数据 。因为插入和删除元素不涉及重排数据,所以它要比ArrayList要快。
C# 关于ArrayList 排序问题
public class Compare : IComparer { int IComparer.Compare(object x, object y) { if ((int)x 》 (int)y) { return 1; } else if ((int)x 《 (int)y) { return -1; } else { return 0; } } }
ArrayList al = new ArrayList(); al.Add(100); al.Add(65); al.Add(85); al.Add(70); al.Sort(new Compare());
java ArrayList排序底层是怎么实现的
list是一个集合,可以存入很多种对象类型。如果你存入的都是自定义类,怎么能排序呢。如果你用泛型存入字符串或是数字等,排序就是按照intstring这些类型进行排序,排序方法也有很多种比较法冒泡法等。如果你想了解排序可以网上看一下各种排序的算法,自己体会下优缺点。
java arraylist是有序的吗
是有序的。
比如:List《Integer》 list=new ArrayList《Integer》();
list.get(0)
一个list,第一个放进去是1,第二个放进去是2:
List《Integer》 numList=new ArrayList《》();
numList.add(1);
numList.add(2);
当取第一个时numList.get(0);(下标从0开始)
打印它出来还是:1
扩展资料:
LinkedList :对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替)还具有下列方 法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。
参考资料来源:百度百科-java列表
java arraylist 按照对象的属性排序
List中的元素是对象的话,若要按该List中元素的某个属性进行排序,那么应该重写里面元素的hashCode和equals方法,然后再排序。比如该问题要重写course的hashCode和equals方法
java ArrayList 排序
package com.test; public class BookBean { private String no; private String name; private String date; public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } } 以上为使用的BookBean ------------------------------------------ 下面是排序使用的 比较器 package com.test; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Comparator; public class MyComparator implements Comparator《BookBean》 { public int compare(BookBean book1, BookBean book2) { DateFormat df =new SimpleDateFormat(“yyyyMMdd“); try { return df.parse(book1.getDate()).compareTo(df.parse(book2.getDate())); } catch (ParseException e) { return 0; } } } -------------------------------------------------------- 下面是测试: import java.util.Collections; import java.util.List; public class TestSort { public static void main(String args) { List《BookBean》 list = new ArrayList《BookBean》(); for(int i=9;i》0;i--){ BookBean bb = new BookBean(); bb.setDate(“2009030“+i); bb.setNo(“0“+i); bb.setName(“name“+i); System.out.println(bb.getDate()); list.add(bb); } Collections.sort(list,new MyComparator()); System.out.println(“after sort:(ASC)“); for(int i=0;i《list.size();i++){ System.out.println(list.get(i).getDate()); } } }
Java Arraylist 如何使用 Comparator排序
用Comparator是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。 比如:你想对整数采用绝对大小来排序,Integer是不符合要求的,你不需要去修改Integer类(实际上你也不能这么做)去改变它的排序行为,只要使用一个实现了Comparator接口的对象来实现控制它的排序就行了。 示例代码如下: //AbsComparator.java import java.util.*; public class AbsComparator implements Comparator { public int compare(Object o1, Object o2) { int v1 = Math.abs(((Integer)o1).intValue()); int v2 = Math.abs(((Integer)o2).intValue()); return v1 》 v2 ? 1 : (v1 == v2 ? 0 : -1); } } //Test.java import java.util.*; public class Test { public static void main(String args) { //产生一个20个随机整数的数组(有正有负) Random rnd = new Random(); Integer integers = new Integer; for(int i = 0; i 《 integers.length; i++) integers[i] = new Integer(rnd.nextInt(100) * (rnd.nextBoolean() ? 1 : -1)); System.out.println(“用Integer内置方法排序:“); Arrays.sort(integers); System.out.println(Arrays.asList(integers)); System.out.println(“用AbsComparator排序:“); Arrays.sort(integers, new AbsComparator()); System.out.println(Arrays.asList(integers)); } }
java ArrayList 降序排序问题
public static void main(String args) { ArrayList《Integer》 arr=new ArrayList《》(); arr.add(89); arr.add(78); arr.add(56); arr.add(92); arr.add(76); //升序排列; Collections.sort(arr); //逆序输出 Collections.reverse(arr); for(int i=0;i《arr.size();i++){ //这就是你要的效果 System.out.println(“0“+i+“ “+arr.get(i)); } }