list,map,set的遍歷以及排序
阿新 • • 發佈:2019-01-05
1.list
2.mapList<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); });
(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,valueMap<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這樣處理排序目的就是對容器元素排序有一個統一的方式,以簡化程式設計。