集合, 陣列,Comparable,Comparator
阿新 • • 發佈:2019-02-14
//-Cell繼承 Comparable-------------------------------------------------
package day0811;
public class Cell implements Comparable<Cell>{
int x;
int y;
public Cell(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public boolean equals(Object obj) {
if (obj==null){
return false;
}
if(obj==this){
return true;
}
if(obj instanceof Cell){
Cell c = (Cell)obj;
return c.x==this.x && c.y==this.y;
}
return false;
}
@Override
public String toString() {
return "("+x+","+y+")";
}
/**
* 比較大小的方法
* 返回值不不關注具體的值,只關注取值範圍
* 返回值<0:當前物件比給定物件小
* 返回值=0:兩個物件相等
* 返回值>0:當前物件比給定物件大
*/
@Override
public int compareTo(Cell o) {
return this.y - o.y;
}
}
//-集合的contains()方法-------------------------------------------------
package day0811;
import java.util.ArrayList;
import java.util.Collection;
/**
* 集合:List,可重複,有序
* Set 不可重複(一般無序,但也有有序的)
*/
public class CollectionDemo {
public static void main(String[] args) {
Collection<Cell> c = new ArrayList<Cell>();
Cell c3 = new Cell(3,4);
c.add(new Cell(1,2));
c.add(new Cell(2,3));
c.add(c3);
Cell c4 = new Cell(3,4);
System.out.println(c3.equals(c4));//true
/**
* 是否包含給定元素,主要看equals方法
* equals比較為true的,即為包含
*/
System.out.println(c.contains(c4));//true
}
}
//-集合的addAll()、containsAll()方法-------------------------------------------------
package day0811;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo0 {
public static void main(String[] args) {
Collection<String> c1 = new ArrayList<String>();
c1.add("a");
c1.add("b");
c1.add("c");
Collection<String> c2 = new ArrayList<String>();
c2.add("one");
c2.add("two");
//批量把另一集合加過來
c1.addAll(c2);
System.out.println(c1);//結果:[a, b, c, one, two]
Collection<String> c3 = new ArrayList<String>();
c3.add("a");
c3.add("one");
//c1是否包含c3所有的元素
System.out.println(c1.containsAll(c3));//true
}
}
//-集合的remove()方法-------------------------------------------------
package day0811;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo1 {
public static void main(String[] args) {
Collection<Cell> c = new ArrayList<Cell>();
c.add(new Cell(1,2));
c.add(new Cell(2,3));
c.add(new Cell(3,4));
c.add(new Cell(1,2));
Cell cell = new Cell(1,2);
//Collection的remove()方法把比較equals是true的元素刪除
//並且只刪除第一個內容一樣的元素
c.remove(cell);
System.out.println(c);//[(2,3), (3,4), (1,2)]
}
}
//-集合的迴圈方法 (Iterator )-------------------------------------------------
package day0811;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo2 {
public static void main(String[] args) {
// 集合的迭代
//用HashSet也可 : Collection c = new HashSet();
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
/**
* Iterator是個介面
* 問,取,刪(刪不是必須)
*/
Iterator it = c.iterator();
//hasNext詢問迭代器是否還有元素
while(it.hasNext()){
Object obj = it.next();
String str = (String)obj;
System.out.println(str);
}
}
}
//-集合中元素數量size(),以及是否不含元素isEmpty()-------------------------------------------------
package day0811;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo3 {
public static void main(String[] args) {
Collection<Cell> c = new ArrayList<Cell>();
int s = c.size();//集合中元素數量
System.out.println(s);
System.out.println(c.isEmpty());//集合不含任何元素則為true
c.add(new Cell(1,2));
c.add(new Cell(3,4));
System.out.println(c.size());
System.out.println(c.isEmpty());
c.clear();//清空集合中的元素
System.out.println(c.size());
System.out.println(c.isEmpty());
}
}
//-Iterator 刪除集合元素 it.remove()-------------------------------------------------
package day0811;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo4 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("#");
c.add("C");
c.add("java");
c.add("#");
Iterator it = c.iterator();
while(it.hasNext()){
String str = (String)it.next();
if("#".equals(str)){
it.remove();//刪除元素
}
}
System.out.println(c);//[C, java]
}
}
//-集合支援泛型,集合的高階for迴圈,以及Iterator迴圈-------------------------------------------------
package day0811;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* 所有集合都支援泛型,集合中的泛型用來定義集合的元素型別
*/
public class CollectionDemo6 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("a");
c.add("b");
c.add("c");
//高階for迴圈,遍歷集合中元素
for(String str: c){
System.out.println(str);
}
//Iterator也可定義泛型
Iterator<String> it = c.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
//-List的替換下標元素set,插入指定位置元素add(),刪除指定位置上的元素remove------
package day0811;
import java.util.ArrayList;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
//List可以通過下表遍歷集合
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
/**
* T set (int index, T t)
* 替換給定下標的元素
*/
System.out.println(list);//[one, two, three]
String old = list.set(1, "2");
System.out.println(list);//[one, 2, three]
System.out.println("被替換的元素:"+old);//被替換的元素:two
/**
* void add(int index ,T t)
* 插入元素,原位置以及後續的元素向後移動
*/
list.add(1, "22");
System.out.println(list);//[one, 22, 2, three]
/**
* E remove(int index)
* 刪除指定位置上的元素
*/
String str1 = list.remove(1);
System.out.println(list);//[one, 2, three]
System.out.println("被刪的元素:"+str1);//被刪的元素:22
}
}
//-List的子集-------------------------------------------------
package day0811;
import java.util.ArrayList;
import java.util.List;
public class ListDemo1 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<10;i++){
list.add(i);
}
System.out.println(list);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
/**
* 獲取當前集合的子集
* List subList(int start, int end)
* (引數含頭不含尾)
*/
List<Integer> subList = list.subList(3, 8);
System.out.println(subList);//[3, 4, 5, 6, 7]
/**
* 子集的元素全部乘以10
*/
for(int i=0;i<subList.size();i++){
subList.set(i, subList.get(i)*10);
}
System.out.println(subList);//[30, 40, 50, 60, 70]
//修改子集的任何元素都會影響原集合
System.out.println(list);//[0, 1, 2, 30, 40, 50, 60, 70, 8, 9]
}
}
//-陣列轉成List-------------------------------------------------
package day0811;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ToListDemo {
public static void main(String[] args) {
String[] array = {"1","2","3","4","5","6","7"};
List<String> list = Arrays.asList(array);
System.out.println(list);//[1, 2, 3, 4, 5, 6, 7]
//list.add("8");//出錯,不可新增新元素,因為list是隻讀的
//建立新的list2,可以增刪改
List<String> list2 = new ArrayList<String>(list);
list2.add("8");
System.out.println(list2);//[1, 2, 3, 4, 5, 6, 7, 8]
}
}
//-集合轉為陣列-------------------------------------------------
package day0811;
import java.util.ArrayList;
import java.util.Collection;
/**
* 集合轉為陣列
* Collection定義了2個方法
* Object[] toArray()
*<T>T[] toArray(T[] array)
*/
public class ListDemo2 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("one");
c.add("two");
c.add("three");
c.add("four");
//不常用
//Object[] array = c.toArray();
/**
* 常用,new String[0]不夠長就自動建立同類型的陣列
* 若長度夠,則使用給定的陣列
*/
String[] array = c.toArray(new String[0]);
for(String str : array){
System.out.println(str);
}
}
}
//-集合排序Collections.sort(list)---------------------------------
package day0811;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class SortCollectionDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
Random r = new Random();
for(int i=0;i<10;i++){
list.add(r.nextInt(100));
}
/**
* Collections:集合的工具類,可以對list集合排序
*/
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}
//--集合排序 Collections Comparable-----------------------------------
**package day0811;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortCollectionDemo1 {
public static void main(String[] args) {
List<Cell> list = new ArrayList<Cell>();
list.add(new Cell(4,5));
list.add(new Cell(1,7));
list.add(new Cell(1,2));
list.add(new Cell(3,3));
/**
* 使用Collections的sort方法進行排序的集合
* 要求元素必須實現Comparable介面
* 只有實現了該接口才認為是可比較的元素
*/
Collections.sort(list);//Cell裡實現了Comparable介面
System.out.println(list);//[(1,2), (3,3), (4,5), (1,7)]
}
}
**
//--集合排序,Collections.sort(list, c);新建Comparator------------------
package day0811;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortCollectionDemo3 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("小澤老師");
list.add("張三");
list.add("a");
list.add("範老師");
list.add("蒼#null");
System.out.println(list);
Comparator<String> c = new MyComparator();
/**
* 過載的sort方法,根據給定的比較器將給定的集合元素比較大小後進行排序
*/
Collections.sort(list, c);
System.out.println(list);
}
}
//自定義比較器
class MyComparator implements Comparator<String>{
/**
* 自定義比較字串規則:字串字元多的大
*/
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
}