java学习之路 之 Java集合练习题
生活随笔
收集整理的這篇文章主要介紹了
java学习之路 之 Java集合练习题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;import org.junit.Test;/*** 集合 : 解決批量的對象的存儲問題, 優(yōu)點:長度可變,靈活,不用考慮下標. 缺點:只能存對象* 數(shù)組 : 解決批量的數(shù)據(jù)的存儲問題, 優(yōu)點:可以存任意類型的數(shù)據(jù). 缺點:內(nèi)存連續(xù),長度固定,需要處理復雜的下標* * 分類 :* Collection接口 : 只能存放無序可重復的單個對象.* Set接口 : 只能存放無序不可重復單個對象* HashSet* TreeSet* LinkedHashSet* * List接口 : 只能存放有序可重復單個對象, 和數(shù)組最像的* ArrayList 基于數(shù)組實現(xiàn)* Vector 基于數(shù)組實現(xiàn) * LinkedList 基于鏈表實現(xiàn) * * Map接口 : 存放的是雙對象.*/
class Point {int x;int y;public Point(int x, int y) {this.x = x;this.y = y;}@Overridepublic String toString() {return "Point [x=" + x + ", y=" + y + "]";}@Overridepublic boolean equals(Object obj) {if (obj instanceof Point) {if (this.x == ((Point)obj).x && this.y == ((Point)obj).y) {return true;}}return false;}@Overridepublic int hashCode() {return Integer.parseInt(x + "" + y);}
}public class CollectionTest {@Testpublic void testIterator() {List<Integer> list = new LinkedList<Integer>();list.add(100);list.add(50);list.add(40);list.add(500);list.add(200);// 使用迭代器, 每次使用迭代器時必須獲取新鮮的, 即時通過集合對象方法獲取Iterator<Integer> it = list.iterator(); // 內(nèi)部指針指向第一個元素前面//list.add(300); 集合內(nèi)容一旦發(fā)生變化, 以上的迭代器就不可用的了.while (it.hasNext()) { // 如果內(nèi)部指針的后面有元素,返回trueInteger integer = it.next(); // 真的獲取下一個對象, 并同時移動內(nèi)部指針, 注意!!! 在循環(huán)中next方法只允許調(diào)用一次!!!!!!!System.out.println(integer);}}@Testpublic void testArrayList2() {// 1 創(chuàng)建一個List集合對象, 添加20個30以內(nèi)的隨機整數(shù), 并打印輸出List<Integer> list = new ArrayList<Integer>(); // 泛型 : 特別指定集合中只能存儲某種類型的對象// 一旦使用泛型, 集合類型固定, 類型安全//list.add("abc");for (int i = 0; i < 20; i++) {list.add((int)(Math.random() * 30));}int sum = 0;for (Integer integer : list) { // 一旦使用了泛型, 集合中的元素肯定是某類型, 所以可以直接取出sum += integer;}System.out.println("sum:" + sum);for (Integer object : list) {System.out.println(object);}}@Testpublic void exer4() {// 聲明一個Set集合,只能保存Double類型的數(shù)據(jù), 保存10個隨機100以內(nèi)的數(shù), 找出最大值和最小值,打印輸出.Set<Double> set = new HashSet<Double>();for (int i = 0; i < 10; i++) {set.add(Math.random() * 100);}double maxValue = -Double.MAX_VALUE; // 先假定它最小for (Double double1 : set) {if (double1 > maxValue) {maxValue = double1;}}System.out.println(set);System.out.println("max:" + maxValue);}@Testpublic void testArrayList() {List list = new ArrayList(); // 有序可重復list.add(200);list.add(new Integer(200));list.add("abc");list.add("xxx");list.add("abc"); // 500, 200, 200, abc, xxx, abclist.add(0, 500); // 非末端插入list.set(0, 5000); // 替換System.out.println(list);list.remove(Integer.valueOf(200)); // 當成下標來用list.remove(list.size() - 1); System.out.println(list);//[5000, 200, abc, xxx]Object object = list.get(2); // 獲取下標為2的元素System.out.println(object);// List集合遍歷System.out.println("-------------------------------------");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}System.out.println("-------------------------------------");for (Object obj : list) {System.out.println(obj);}}@Testpublic void exer3() {// 1 創(chuàng)建一個List集合對象, 添加20個30以內(nèi)的隨機整數(shù), 并打印輸出List list = new ArrayList();for (int i = 0; i < 20; i++) {list.add((int)(Math.random() * 30));}for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}}@Testpublic void exer32() {// 1 創(chuàng)建一個List集合對象, 添加20個30以內(nèi)的隨機整數(shù), 并打印輸出// 2 添加20個30以內(nèi)的隨機整數(shù), 不允許重復.List list = new ArrayList();while (list.size() != 20) {int rand = (int)(Math.random() * 30);// 判斷已經(jīng)存在的元素中是否包含這個對象, 如果不包含才添加if (!list.contains(rand)) {list.add(rand);}}for (Object object : list) {System.out.println(object);}}// 寫一個類Point, 坐標隨機生成,5以內(nèi)// 創(chuàng)建20個Point對象, 添加到Set集合中, 遍歷打印輸出@Testpublic void exer2() {Set set = new HashSet();set.add(new Point(10, 20)); // 元素重復的標準是 對象.equals(新元素)返回true, 并且hashCode()方法的返回值也一樣set.add(new Point(10, 20));for (Object object : set) {System.out.println(object);}}@Testpublic void testHashSet() {Set set = new HashSet(); // 無序并內(nèi)容不可重復boolean b1 = set.add(new Integer(200));System.out.println(b1);set.add(300);// set.add(Integer.valueOf(300));set.add("abc");set.add(new Point(10, 30));boolean b4 = set.add(200);// 再次添加相同的元素會失敗!!System.out.println(b4);set.add("xxx");boolean b6 = set.add("abc"); // 再次添加相同的元素會失敗!!System.out.println(b6);System.out.println("size:" + set.size()); // 獲取容量System.out.println(set);set.remove("abc");set.remove(300);boolean b7 = set.remove(300);System.out.println(b7);System.out.println(set);System.out.println("------------------------------------");// 集合遍歷, 把其中所有元素挨個訪問, 增強型for/*for (元素類型 對象 : 集合) {System.out.println(對象);}*/for (Object object : set) {System.out.println(object);}}@Testpublic void exer13() {// 1 創(chuàng)建一個Set集合, 2 保存20個40以內(nèi)的隨機整數(shù), 必須保證20個.Set set = new HashSet();for (int i = 0; i < 20; i++) {boolean b = set.add((int)(Math.random() * 40));if (!b) {i--;}}// 遍歷for (Object obj : set) {System.out.println(obj);}}@Testpublic void exer12() {// 1 創(chuàng)建一個Set集合, 2 保存20個40以內(nèi)的隨機整數(shù), 必須保證20個.Set set = new HashSet();while (set.size() != 20) {set.add((int)(Math.random() * 40));}System.out.println("size:" + set.size());// 遍歷for (Object obj : set) {System.out.println(obj);}}@Testpublic void exer1() {// 1 創(chuàng)建一個Set集合, 保存20個40以內(nèi)的隨機整數(shù), 遍歷打印輸出Set set = new HashSet();for (int i = 0; i < 20; i++) {set.add((int)(Math.random() * 40));}System.out.println("size:" + set.size());// 遍歷for (Object obj : set) {System.out.println(obj);}}
}package com.guigu.javae.collection;import java.util.List;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeSet;import org.junit.Test;import com.atguigu.javase.home.Student;public class CollectionTest {@Testpublic void test6() {List<Student> list = new ArrayList<Student>();for (int i = 0; i < 10; i++) {list.add(new Student(i + 1, 5, (int)(Math.random() * 101)));}System.out.println(list);Collections.sort(list); // 需要可比較System.out.println(list);Collections.reverse(list); //反轉(zhuǎn) 不需要可比較System.out.println(list);Collections.shuffle(list); //不需要可比較System.out.println(list);System.out.println("max:" + Collections.max(list));// 需要可比較System.out.println("min:" + Collections.min(list));// 需要可比較}@Testpublic void test5() {List<Integer> list = new ArrayList<Integer>();for (int i = 0; i < 10; i++) {list.add((int)(Math.random() * 20));}System.out.println(list);Collections.sort(list);System.out.println(list);Collections.reverse(list); //反轉(zhuǎn)System.out.println(list);Collections.shuffle(list);System.out.println(list);}@Testpublic void test1() {Set<Integer> set1 = new TreeSet<Integer>(); // 無序(不按添加順序), 內(nèi)部使用了自然排序set1.add(100);set1.add(20);set1.add(0);set1.add(50);set1.add(10);set1.add(30);set1.add(40);for (Integer integer : set1) {System.out.println(integer);}System.out.println("---------------------------");Set<Student> set2 = new TreeSet<Student>(); // 添加的對象所屬的類必須實現(xiàn)Comparable. 原因是要實現(xiàn)自然排序,必須對象可比// 去重不再依據(jù)equals和hashCode, 依據(jù)的是compareTo, 如果方法返回0,代表對象重復set2.add(new Student(3, 1, 100));set2.add(new Student(2, 2, 80));set2.add(new Student(1, 3, 30));set2.add(new Student(5, 4, 40));set2.add(new Student(2, 5, 50));for (Student student : set2) {System.out.println(student);}}@Testpublic void exer1() {Map<String, String> map = new HashMap<String, String>();String url = "q=iphone6s&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&ie=utf8&initiative_id=tbindexz_20160813&app=detailproduct&through=1";String[] parameters = url.split("&");for (int i = 0; i < parameters.length; i++) {//System.out.println(parameters[i]);String[] arr = parameters[i].split("=");map.put(arr[0],arr[1]);}// 遍歷Set<String> keys = map.keySet();Iterator<String> iterator = keys.iterator();while (iterator.hasNext()) {String parmName = iterator.next();String parmValue = map.get(parmName);System.out.println(parmName + "------------" + parmValue);}}@Testpublic void test3() {Map<String, Student> map = new HashMap<String, Student>();//Student s1 = new Student(1, 1, 10);map.put("s1", new Student(1, 1, 10));map.put("s2", new Student(2, 2, 20));map.put("s3", new Student(3, 3, 30));}@Testpublic void test4() throws FileNotFoundException, IOException {Properties properties = new Properties();properties.load(new FileInputStream("config.properties")); // 自動處理文本文件,并其中的內(nèi)容,其中的=左邊的字符串作為了鍵,右邊的字符串作為了值String host = properties.getProperty("host");int port = Integer.parseInt(properties.getProperty("port").trim());String abc = properties.getProperty("abc");System.out.println(host);System.out.println(port);System.out.println(abc);}@Testpublic void test2() {Set<Integer> set = new HashSet<Integer>();set.add(1);set.add(2);set.add(5);set.add(3);set.add(4);set.add(3);System.out.println(set);}
}
package com.guigu.javase.home;import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;import org.junit.Test;public class HomeWork {@Testpublic void work1() {// 寫一個Student類, 包含屬性id[1-30), grade[1-6], score[0-100], 所有屬性都是隨機生成// 創(chuàng)建一個Set集合, 保存20個對象, 如果兩個對象的id是一樣的,則不允許添加.// 使用迭代器遍歷集合,打印輸出對象的信息, 并找出分數(shù)最高的同學和分數(shù)最低的同學, 最后打印輸出最高分和最低分同學信息.Set<Student> set = new HashSet<Student>();for (; set.size() != 20;) {int id = (int)(Math.random() * 29 + 1);int grade = (int)(Math.random() * 6 + 1);double score = (int)(Math.random() * 1001) / 10.0;set.add(new Student(id, grade, score));}for (Student student : set) {System.out.println(student);}System.out.println("---------------------------");Student maxScoreStudent = null;Student minScoreStudent = null;Iterator<Student> iterator = set.iterator();while (iterator.hasNext()) {Student student = iterator.next();if (maxScoreStudent == null) {maxScoreStudent = student;minScoreStudent = student;}if (student.getScore() > maxScoreStudent.getScore()) {maxScoreStudent = student;} if (student.getScore() < minScoreStudent.getScore()) {minScoreStudent = student;}}System.out.println(maxScoreStudent);System.out.println(minScoreStudent);}
}class Student implements Comparable<Student> {private int id;private int grade;private double score;public Student() {}public Student(int id, int grade, double score) {super();this.id = id;this.grade = grade;this.score = score;}public int getId() {return id;}public void setId(int id) {this.id = id;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}@Overridepublic String toString() {return "Student [id=" + id + ", grade=" + grade + ", score=" + score + "]";}/*@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + id;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Student other = (Student) obj;if (id != other.id)return false;return true;}*/@Overridepublic int compareTo(Student o) {return (int)(this.score - o.score);}
}
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;import org.junit.Test;public class MapTest {@Testpublic void test1() {Map<Integer, String> map = new HashMap<Integer, String>(); //空詞典map.put(5, "five"); // 寫入詞條map.put(2, "two");map.put(0, "zero");map.put(4, "four");map.put(2, "TWO"); // 如果出現(xiàn)鍵相同的情況, 鍵對應(yīng)的老的值就會被覆蓋System.out.println(map.size());String value = map.get(4); // 根據(jù)鍵,獲取值, 查詞典System.out.println(value);map.remove(0); // 把0和"zero"同時刪除// 遍歷Map集合,先遍歷它的所有鍵Set<Integer> set = map.keySet(); // 獲取map中的所有鍵的一個Set集合Iterator<Integer> it = set.iterator();while (it.hasNext()) {Integer key = it.next();String valueString = map.get(key);System.out.println(key + "-----------------" + valueString);}}
}
總結(jié)
以上是生活随笔為你收集整理的java学习之路 之 Java集合练习题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java集合练习题_「集合练习题」Jav
- 下一篇: Java基础视频教程(最适合初学者入门)