Arrays
// 目標(biāo):學(xué)會(huì)使用Arrays類的常用API ,并理解其原理
int[] arr = {10, 2, 55, 23, 24, 100};
System.out.println(arr);
// 1藻雌、返回?cái)?shù)組內(nèi)容的 toString(數(shù)組)
// String rs = Arrays.toString(arr);
// System.out.println(rs);
System.out.println(Arrays.toString(arr));
// 2赁炎、排序的API(默認(rèn)自動(dòng)對(duì)數(shù)組元素進(jìn)行升序排序)
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// 3懒鉴、二分搜索技術(shù)(前提數(shù)組必須排好序才支持拱燃,否則出bug)
int index = Arrays.binarySearch(arr, 55);
System.out.println(index);
// 返回不存在元素的規(guī)律: - (應(yīng)該插入的位置索引 + 1)
int index2 = Arrays.binarySearch(arr, 22);
System.out.println(index2);
// 注意:數(shù)組如果么有排好序,可能會(huì)找不到存在的元素腾它,從而出現(xiàn)bug!!
int[] arr2 = {12, 36, 34, 25 , 13, 24, 234, 100};
System.out.println(Arrays.binarySearch(arr2 , 36));
自定義比較器
// 目標(biāo):自定義數(shù)組的排序規(guī)則:Comparator比較器對(duì)象跑筝。
// 1、Arrays的sort方法對(duì)于有值特性的數(shù)組是默認(rèn)升序排序
int[] ages = {34, 12, 42, 23};
Arrays.sort(ages);
System.out.println(Arrays.toString(ages));
// 2瞒滴、需求:降序排序继蜡!(自定義比較器對(duì)象,只能支持引用類型的排序!稀并!)
Integer[] ages1 = {34, 12, 42, 23};
/**
參數(shù)一:被排序的數(shù)組 必須是引用類型的元素
參數(shù)二:匿名內(nèi)部類對(duì)象仅颇,代表了一個(gè)比較器對(duì)象。
*/
Arrays.sort(ages1, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// 指定比較規(guī)則碘举。
// if(o1 > o2){
// return 1;
// }else if(o1 < o2){
// return -1;
// }
// return 0;
// return o1 - o2; // 默認(rèn)升序
return o2 - o1; // 降序
}
});
System.out.println(Arrays.toString(ages1));
System.out.println("-------------------------");
Student[] students = new Student[3];
students[0] = new Student("吳磊",23 , 175.5);
students[1] = new Student("謝鑫",18 , 185.5);
students[2] = new Student("王亮",20 , 195.5);
System.out.println(Arrays.toString(students));
// Arrays.sort(students); // 直接運(yùn)行奔潰
Arrays.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// 自己指定比較規(guī)則
// return o1.getAge() - o2.getAge(); // 按照年齡升序排序忘瓦!
// return o2.getAge() - o1.getAge(); // 按照年齡降序排序!引颈!
// return Double.compare(o1.getHeight(), o2.getHeight()); // 比較浮點(diǎn)型可以這樣寫 升序
return Double.compare(o2.getHeight(), o1.getHeight()); // 比較浮點(diǎn)型可以這樣寫 降序
}
});
System.out.println(Arrays.toString(students));
Collection
// 有序 可重復(fù) 有索引
Collection list = new ArrayList();
list.add("Java");
list.add("Java");
list.add("Mybatis");
list.add(23);
list.add(23);
list.add(false);
list.add(false);
System.out.println(list);
// 無(wú)序 不重復(fù) 無(wú)索引
Collection list1 = new HashSet();
list1.add("Java");
list1.add("Java");
list1.add("Mybatis");
list1.add(23);
list1.add(23);
list1.add(false);
list1.add(false);
System.out.println(list1);
System.out.println("-----------------------------");
// Collection<String> list2 = new ArrayList<String>();
Collection<String> list2 = new ArrayList<>(); // JDK 7開始之后后面類型申明可以不寫
list2.add("Java");
// list2.add(23);
list2.add("黑馬");
// 集合和泛型不支持基本數(shù)據(jù)類型耕皮,只能支持引用數(shù)據(jù)類型
// Collection<int> list3 = new ArrayList<>();
Collection<Integer> list3 = new ArrayList<>();
list3.add(23);
list3.add(233);
list3.add(2333);
Collection<Double> list4 = new ArrayList<>();
list4.add(23.4);
list4.add(233.0);
list4.add(233.3);
Collection API
// HashSet:添加的元素是無(wú)序,不重復(fù)蝙场,無(wú)索引凌停。
Collection<String> c = new ArrayList<>();
// 1.添加元素, 添加成功返回true。
c.add("Java");
c.add("HTML");
System.out.println(c.add("HTML"));
c.add("MySQL");
c.add("Java");
System.out.println(c.add("黑馬"));
System.out.println(c); // [Java, HTML, HTML, MySQL, Java, 黑馬]
// 2.清空集合的元素售滤。
// c.clear();
// System.out.println(c);
// 3.判斷集合是否為空 是空返回true,反之罚拟。
// System.out.println(c.isEmpty());
// 4.獲取集合的大小。
System.out.println(c.size());
// 5.判斷集合中是否包含某個(gè)元素完箩。
System.out.println(c.contains("Java")); // true
System.out.println(c.contains("java")); // false
System.out.println(c.contains("黑馬")); // true
// 6.刪除某個(gè)元素:如果有多個(gè)重復(fù)元素默認(rèn)刪除前面的第一個(gè)赐俗!
System.out.println(c.remove("java")); // false
System.out.println(c);
System.out.println(c.remove("Java")); // true
System.out.println(c);
// 7.把集合轉(zhuǎn)換成數(shù)組 [HTML, HTML, MySQL, Java, 黑馬]
Object[] arrs = c.toArray();
System.out.println("數(shù)組:" + Arrays.toString(arrs));
System.out.println("----------------------拓展----------------------");
Collection<String> c1 = new ArrayList<>();
c1.add("java1");
c1.add("java2");
Collection<String> c2 = new ArrayList<>();
c2.add("趙敏");
c2.add("殷素素");
// addAll把c2集合的元素全部倒入到c1中去。
c1.addAll(c2);
System.out.println(c1);
System.out.println(c2);
迭代器
ArrayList<String> lists = new ArrayList<>();
lists.add("趙敏");
lists.add("小昭");
lists.add("素素");
lists.add("滅絕");
System.out.println(lists);
// [趙敏, 小昭, 素素, 滅絕]
// it
// 1弊知、得到當(dāng)前集合的迭代器對(duì)象阻逮。
Iterator<String> it = lists.iterator();
// String ele = it.next();
// System.out.println(ele);
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next()); // NoSuchElementException 出現(xiàn)無(wú)此元素異常的錯(cuò)誤
// 2、定義while循環(huán)
while (it.hasNext()){
String ele = it.next();
System.out.println(ele);
}
System.out.println("-----------------------------");
增強(qiáng)for
Collection<String> lists = new ArrayList<>();
lists.add("趙敏");
lists.add("小昭");
lists.add("殷素素");
lists.add("周芷若");
System.out.println(lists);
// [趙敏, 小昭, 殷素素, 周芷若]
// ele
for (String ele : lists) {
System.out.println(ele);
}
System.out.println("------------------");
double[] scores = {100, 99.5 , 59.5};
for (double score : scores) {
System.out.println(score);
// if(score == 59.5){
// score = 100.0; // 修改無(wú)意義秩彤,不會(huì)影響數(shù)組的元素值叔扼。
// }
}
System.out.println(Arrays.toString(scores));
Collection<String> lists = new ArrayList<>();
lists.add("趙敏");
lists.add("小昭");
lists.add("殷素素");
lists.add("周芷若");
System.out.println(lists);
// [趙敏, 小昭, 殷素素, 周芷若]
// s
lists.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
// lists.forEach(s -> {
// System.out.println(s);
// });
// lists.forEach(s -> System.out.println(s) );
lists.forEach(System.out::println );