1. 程式人生 > >list,map,set的遍歷以及排序

list,map,set的遍歷以及排序

1.list

List<String> list = new ArrayList<>();
(1)超級for迴圈遍歷
for(String a : list) {
  System.out.println(a);
}

(2)
for(int i=0;i<list.size();i++){
      System.out.println(list.get(i));
}
(3)
 Iterator it=list.iterator();
for(it;it.hasNext();){
System.out.println(it.next());
}
或者
while(it.hasNext()){
System.out.println(it.next());
}
(4)
list.stream().froEach(st->{
System.out.println(st);
});
2.map

(1)在for迴圈中使用entries遍歷

Map<Integer, Integer> map = new HashMap<Integer, Integer>();  
  
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {  
  
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  
  
}  
(2)使用Map.keySet(),Map.value()分別遍歷key,value
Map<Integer, Integer> map = new HashMap<Integer, Integer>();  
  
//遍歷map中的鍵  
  
for (Integer key : map.keySet()) {  
  
    System.out.println("Key = " + key);  
  
}  
  
//遍歷map中的值  
  
for (Integer value : map.values()) {  
  
    System.out.println("Value = " + value);  
  
}  

(3)使用iterator遍歷
Map<Integer, Integer> map = new HashMap<Integer, Integer>();  
  
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();  
  
while (entries.hasNext()) {  
  
    Map.Entry<Integer, Integer> entry = entries.next();  
  
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  
  
} 
(4)不使用泛型
Map map = new HashMap();  
  
Iterator entries = map.entrySet().iterator();  
  
while (entries.hasNext()) {  
  
    Map.Entry entry = (Map.Entry) entries.next();  
  
    Integer key = (Integer)entry.getKey();  
  
    Integer value = (Integer)entry.getValue();  
  
    System.out.println("Key = " + key + ", Value = " + value);  
  
} 

3.Set
1.迭代遍歷:  
Set<String> set = new HashSet<String>();  
Iterator<String> it = set.iterator();  
while (it.hasNext()) {  
  String str = it.next();  
  System.out.println(str);  
}  
  
2.for迴圈遍歷:  
for (String str : set) {  
      System.out.println(str);  
}

4.集合的排序

Java API針對集合型別排序提供了兩種支援:
java.util.Collections.sort(java.util.List)
java.util.Collections.sort(java.util.List, java.util.Comparator)

第一個方法要求所排序的元素類必須實現java.lang.Comparable介面。
第二個方法要求實現一個java.util.Comparator介面。

java.lang.Comparable介面和java.util.Comparator介面是Java對排序最提供最基本支援。這兩個介面不但可以用於集合元素排序,還可以用於陣列排序。

如果陣列或集合元素是String型別,則可以利用Java API實現的Comparator<String>物件String.CASE_INSENSITIVE_ORDER為容器元素排序。

下面給出兩個裡測試,涵蓋集合和陣列的排序,並且還演示了陣列和集合的相互轉換,附件裡面是完整的排序演示程式碼。 
方法一:實現Comparable介面排序package collsort.comparable; 

package com.cvicse.sort.comparable;

public class Cat implements Comparable<Cat> {
private int age;
private String name;

public Cat(int age, String name) {
this.age = age;
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
......
public int compareTo(Cat o) {
return this.getAge() - o.getAge();
}
......
}


通過實現Comparable介面實現個性化排序測試。排序測試,Collection.sort(list)升序排列Collections.sort(list, Collections.reverseOrder());降序排列;Collections.reverse(list);反轉排序,先輸出列表最後一個元素
public class TestComparable {
public static void main(String args[]) {
test();
test2();
}
public static void test() {
......
List<Cat> listCat1 = new ArrayList<Cat>();
Cat cat1 = new Cat(34, "hehe");
Cat cat2 = new Cat(12, "haha");
Cat cat3 = new Cat(23, "leizhimin");
Cat cat4 = new Cat(13, "lavasoft");
listCat1.add(cat1);
listCat1.add(cat2);
listCat1.add(cat3);
......
System.out.println("呼叫Collections.sort(List<T> list)listCat2升序排序:");
Collections.sort(listCat1);
System.out.println("降序排列元素:");
Collections.sort(listCat1, Collections.reverseOrder());
System.out.println("Collections.reverse 從列表中最後一個元素開始輸出:");
Collections.reverse(listCat1);
......
}


/**
* 針對陣列的排序
*/
public static void test2() {
String[] strArray = new String[] { "z", "a", "C" };
System.out.println("陣列轉換為列表");
List<String> list = Arrays.asList(strArray);
System.out.println("順序排序列表");
Collections.sort(list);
System.out
.println("按String實現的Comparator物件String.CASE_INSENSITIVE_ORDER排序----");
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
System.out.println("倒序排序列表");
Collections.sort(list, Collections.reverseOrder());
......
}
}


方法二:實現Comparator介面排序
public class Person {
private int age;
private String name;
......
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
......
}


實現了Comparator介面,重寫了compare方法
import java.util.Comparator;
public class PersonComparator implements Comparator<Person> {

public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
}
測試方法
public class TestComparator {
public static void main(String args[]) {
test1();
}
public static void test1() {
System.out.println("升序排序測試:");
List<Person> listPerson = new ArrayList<Person>();
Person person1 = new Person(34, "lavasoft");
Person person2 = new Person(12, "lavasoft");
Person person3 = new Person(23, "leizhimin");
Person person4 = new Person(13, "sdg");
listPerson.add(person1);
listPerson.add(person2);
listPerson.add(person3);
Comparator<Person> ascComparator = new PersonComparator();
System.out.println("排序後集合為:");
// 利用Collections類靜態工具方法對集合List進行排序
Collections.sort(listPerson, ascComparator);
System.out.println("\n降序排序測試:");
// 從升序排序物件產生一個反轉(降序)的排序物件
Comparator<Person> descComparator = Collections
.reverseOrder(ascComparator);
System.out.println("利用反轉後的排序介面物件對集合List排序並輸出:");
Collections.sort(listPerson, descComparator);
outCollection(listPerson);
}
}
以上的例子中使用是對int型別的屬性排序,對String屬性排序可以用以下的方法

public int compareTo(Cat o) {return this.getName().compareTo(o.getName());}
comparetTo()函式的使用說明: 
如果 結果
<0 a<b
==0 a==b
>=0 a>b
Java如何通過所實現介面的方法進行排序是API內部的事情,Java這樣處理排序目的就是對容器元素排序有一個統一的方式,以簡化程式設計。

http://www.cnblogs.com/standcloud/articles/2601914.html       排序部分原地址