JavaSE集合练习题
JavaSE集合練習題
- 簡答
- 編程
- 參考文獻
簡答
1.Collection 和 Collections的區別
解:Collection是集合類的上級接口,繼承于他的接口主要有 Set 和 List
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作
2.Set里的元素是不能重復的,那么用什么方法來區分重復與否呢? 是用==還是equals()? 它們有何區別
解:Set里的元素是不能重復的,用equals()方法判讀兩個Set是否相等
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值
3.List, Set, Map是否繼承自Collection接口
解:List,Set 繼承自 Collection 接口
Map不是繼承Collection 接口
4.兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對
解:不對,有相同的 hash code
5.說出ArrayList,Vector, LinkedList的存儲性能和特性
解:共同點 :三個類都是實現了 List接口,存儲數據的特點相同:存儲有序的,可重復的數據區別: ArrayList :作為 List接口的主要實現類;線程不安全的,效率高;底層使用 Object[] elementData 存儲LinkedList:對于頻繁的插入,刪除操作,使用此類效率比 ArrayList高;底層使用雙向鏈表存儲Vector :作為 List接口的古老實現類;線程安全的,效率低;底層使用 Object[] elementData 存儲6.HashMap和Hashtable的區別
1.HashMap與Hashtable都實現了Map接口。由于HashMap的非線程安全性,效率上可能高于Hashtable。Hashtable的方法是 Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須 為之提供外同步 2. HashMap允許將null作為一個entry的key或者value,而Hashtable不允許 3.HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解 4.Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現 5.Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異7.你所知道的集合類都有哪些?主要方法?
最常用的集合類是 List 和 Map。 List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、存儲和操作任何類型對象的元素列表。 List 適用于按數值索引訪問元素的情形。 Map 提供了一個更通用的元素存儲方法。 Map 集合類用于存儲元素對(稱作"鍵"和"值"),其中每個鍵映射到一個值編程
1.定義一個Collection接口類型的變量,引用一個Set集合的實現類,實現添加單個元素,添加另一個集合,刪除元素,判斷集合中是否包含一個元素,判斷是否為空,清除集合,返回集合里元素的個數等常用操作
注:Set接口中沒有額外定義新的方法,使用的都是 Collection 中聲明的方法
package com.atguigu.com;import java.util.Collection; import java.util.HashSet;public class exer1 {public static void main(String[] args) {Collection coll1 = new HashSet();//1.添加單個元素coll1.add(123);coll1.add("九十九");coll1.add(12.56);//2.添加另一個集合Collection coll2 = new HashSet();coll2.add("coll2");coll2.add(false);coll1.addAll(coll2);//3.刪除元素coll1.remove(12.56);//4.判斷集合中是否包含一個元素coll1.contains(false);//5.判斷是否為空coll1.isEmpty();//6.清除集合coll1.clear();//7.返回集合里元素的個數coll1.size();} }2.創建Set接口的實現類,添加10個以上的元素,通過Iterator遍歷此集合元素
package com.atguigu.com;import java.util.HashSet; import java.util.Iterator; import java.util.Set;public class exer2 {public static void main(String[] args) {Set set = new HashSet();//添加元素set.add(12);set.add(12.4);set.add('c');set.add(true);set.add(false);set.add("九十八");set.add("學而不思則罔");set.add("思而不學則殆");set.add("溫故而知新");set.add("可以為師矣");//使用Iterator 遍歷此集合Iterator iterator = set.iterator();//搭配hasNext()和next()方法while(iterator.hasNext()){System.out.println(iterator.next());}} } c 12.4 false 九十八 學而不思則罔 溫故而知新 可以為師矣 思而不學則殆 12 true3.創建Set接口的實現類,添加10個以上的元素,通過foreach遍歷此集合元素
package com.atguigu.com; import java.util.HashSet;import java.util.Set; public class exer3 {public static void main(String[] args) {Set set = new HashSet();//添加元素set.add(12);set.add(12.4);set.add('c');set.add(true);set.add(false);set.add("九十八");set.add("學而不思則罔");set.add("思而不學則殆");set.add("溫故而知新");set.add("可以為師矣");//使用foreach來遍歷集合//for(集合元素的類型 局部變量 : 集合對象){}for(Object i : set){System.out.println(i);}} } c 12.4 false 九十八 學而不思則罔 溫故而知新 可以為師矣 思而不學則殆 12 true4.創建Set接口的實現類,添加10個以上的元素,要求能夠排序
注:向 TreeSet 中添加的數據,要求是相同類的對象
package com.atguigu.com;import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet;public class exer4 {public static void main(String[] args) {//定制排序Comparator com = new Comparator() {//對字符串進行排序 從大到小@Overridepublic int compare(Object o1, Object o2) {if(o1 instanceof String && o2 instanceof String){String str1 = (String)o1;String str2 = (String)o2;return -str1.compareTo(str2);}else{throw new RuntimeException("輸入數據類型不匹配!");}}};TreeSet tree = new TreeSet(com);tree.add("abcd");tree.add("cdac");tree.add("zsdc");Iterator iterator = tree.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}} } zsdc cdac abcd記錄:java 比較器 comparable 和 comparator 需要復習,一調用比較器就犯迷糊
5.定義一個Collection接口類型的變量,引用一個List集合的實現類,實現添加單個元素,添加另一個集合,刪除元素,判斷集合中是否包含一個元素,判斷是否為空,清除集合,返回集合里元素的個數等常用操作
package com.atguigu.com;import java.util.ArrayList; import java.util.Collection;public class exer5 {public static void main(String[] args) {ArrayList list = new ArrayList();//1.添加單個元素 可重復list.add(123);list.add(456);list.add(false);list.add(456);//2.添加另一個集合ArrayList list1 = new ArrayList();list1.add(12.4);list1.add(34.6);list.add(list1);//將list1作為一個元素添加到list中list.addAll(list1);//將list1中的每個元素迭代添加到list中//3.刪除元素//3.1 按照元素刪除list.remove(false);//3.2按照索引刪除list.remove(2);//4.判斷集合中是否包含一個元素list.contains(true);//5.判斷是否為空list.isEmpty();//6.清除集合list.clear();//7.返回集合里元素的個數list.size();} }6.創建ArrayList實例化對象,添加10個以上的元素,在2號位插入一個元素,獲得5號位元素,刪除6號位元素,修改7號位的元素;
package com.atguigu.com;import java.util.ArrayList;public class exer6 {public static void main(String[] args) {ArrayList list = new ArrayList();//演示 采用for循環迭代添加元素for(int i = 0;i < 10;i++){list.add(i);}//在2號位插入一個元素 2號位默認為索引list.add(2,"insert");//獲得5號位元素list.get(5);//刪除6號位元素 idea中可以顯示是索引還是元素值list.remove(6);//修改7號位的元素list.set(7,"new");} }7.通過四種方法遍歷上題中的集合
package com.atguigu.com;import java.util.ArrayList; import java.util.Iterator;public class exer7 {public static void main(String[] args) {ArrayList list = new ArrayList();//演示 采用for循環迭代添加元素for(int i = 0;i < 10;i++){list.add(i);}//在2號位插入一個元素 2號位默認為索引list.add(2,"insert");//獲得5號位元素list.get(5);//刪除6號位元素 idea中可以顯示是索引還是元素值list.remove(6);//修改7號位的元素list.set(7,"new");//使用iterator 進行遍歷Iterator iterator = list.iterator();while(iterator.hasNext()){System.out.print(iterator.next() + " ");}System.out.println();//使用foreach 進行遍歷for(Object obj:list){System.out.print(obj + " ");}System.out.println();//使用for進行遍歷for(int i = 0; i < list.size();i++){System.out.print(list.get(i) + " ");}System.out.println();//使用Lambda表達式的forEach 之前沒用過這種結構list.forEach(item -> System.out.print(item + " "));} } 0 1 insert 2 3 4 6 new 8 9 0 1 insert 2 3 4 6 new 8 9 0 1 insert 2 3 4 6 new 8 9 0 1 insert 2 3 4 6 new 8 98.按要求實現下列問題
1)封裝一個新聞類,包含標題和內容屬性,提供get、set方法,重寫toString方法,打印對象時只打印標題;
2)只提供一個帶參數的構造器,實例化對象時,只初始化標題;并且實例化兩個對象:
新聞一:中國多地遭霧霾籠罩空氣質量再成熱議話題
新聞二:春節臨近北京“賣房熱”
3)將新聞對象添加到ArrayList集合中,并且使用ListIterator倒序遍歷;
4)在遍歷集合過程中,對新聞標題進行處理,超過15字的只保留前14個,然后在后邊加“…”
5)在控制臺打印遍歷出經過處理的新聞標題;
package com.atguigu.com;public class News {private String title;private String content;public News(String title){this.title = title;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}@Overridepublic String toString() {return "News{" +"title='" + title + '\'' +'}';} } package com.atguigu.com;import java.util.ArrayList; import java.util.Collection; import java.util.ListIterator;public class NewsTest {public static void main(String[] args) {News n1 = new News("中國多地遭霧霾籠罩空氣質量再成熱議話題");News n2 = new News("春節臨近北京\"賣房熱\"");ArrayList list = new ArrayList();list.add(n1);list.add(n2);ListIterator iterator = list.listIterator();//指針位于開頭while(iterator.hasNext()) {//不斷循環 將指針位于結尾iterator.next();}//逆向遍歷while(iterator.hasPrevious()) {Object obj = iterator.previous();News n = (News) obj;String title = n.getTitle();if(title.length() > 15){System.out.println(title.substring(0,15) + "...");}else{System.out.println(title);}}} }9 定義一個Map接口類型的變量,引用一個實現類,添加鍵值對,判斷集合中是否包含某一key值,通過某一key值得到value值,通過某一key刪除鍵值對,把另一個map集合添加到此map集合,判斷是否為空,清除集合,返回集合里元素的個數等常用操作
package com.atguigu.com;import java.util.HashMap;public class exer9 {public static void main(String[] args) {HashMap map = new HashMap();//添加鍵值對map.put("AA",123);map.put(45,123);map.put("BB",56);//判斷集合中是否包含某一key值map.containsKey("CC");//通過某一key值得到value值map.get("AA");//通過某一key刪除鍵值對map.remove("BB");//把另一個map集合添加到此map集合HashMap map1 = new HashMap();map1.put("DD",452);map1.put("EE",123);map.putAll(map1);//判斷是否為空map.isEmpty();//清除集合map.clear();//返回集合里元素的個數map.size();} }10.通過兩種方法遍歷上題中的map集合
package com.atguigu.com;import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;public class exer10 {public static void main(String[] args) {HashMap map = new HashMap();//添加鍵值對map.put("AA",123);map.put(45,123);map.put("BB",56);//判斷集合中是否包含某一key值map.containsKey("CC");//通過某一key值得到value值map.get("AA");//通過某一key刪除鍵值對map.remove("BB");//把另一個map集合添加到此map集合HashMap map1 = new HashMap();map1.put("DD",452);map1.put("EE",123);map.putAll(map1);//判斷是否為空map.isEmpty();//清除集合//map.clear();//返回集合里元素的個數map.size();//遍歷集合//方式一:entrySet()Set entrySet = map.entrySet();Iterator iterator = entrySet.iterator();while (iterator.hasNext()){Object obj = iterator.next();//entrySet 集合中的元素都是entryMap.Entry entry = (Map.Entry) obj;System.out.println(entry.getKey() +"----->" + entry.getValue());}System.out.println("---------------");//方式二Set keySet = map.keySet();Iterator iterator1 = keySet.iterator();while (iterator1.hasNext()){Object key = iterator1.next();Object value = map.get(key);System.out.println(key +"----->" + value);}} }11.使用Map接口的實現類完成員工工資(姓名–工資)的摸擬:
1)添加幾條信息
2)列出所有的員工姓名
3列出所有員工姓名及其工資
4)刪除名叫“Tom”的員工信息
5)輸出Jack的工資,并將其工資加1000元(通過取值實現)
6)將所有工資低于1000元的員工的工資上漲20%(通過取值實現)
參考文獻
鏈接: B站尚硅谷宋紅康Java.
總結
以上是生活随笔為你收集整理的JavaSE集合练习题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用Mac线刷小米手机
- 下一篇: Java 小游戏(骑士大战魔王)