题目01
list测试
package com.jerry.java; import org.junit.Test; import java.util.*; /** * @author jerry_jy * @create 2022-10-05 16:50 */ public class CollectionTest { @Test public void test1() { System.out.println("========ArrayList======="); Collection arrayList = new ArrayList(); arrayList.add("AA"); arrayList.add("BB"); arrayList.add(123); arrayList.add(new Date()); System.out.println(arrayList.size());//4 System.out.println("========LinkedList========="); Collection linkedList = new LinkedList(); linkedList.add("CC"); linkedList.add(456); System.out.println(linkedList.size());//2 linkedList.addAll(linkedList); System.out.println(linkedList.size());//6 System.out.println(linkedList);//[AA, BB, 123, Wed Oct 05 16:58:36 CST 2022, CC, 456] linkedList.clear(); System.out.println(linkedList.isEmpty());//true System.out.println("======================="); Collection vector = new Vector(); vector.add("DD"); vector.add(789); System.out.println(vector.size());//2 System.out.println(vector);//[DD, 789] arrayList.addAll(vector); System.out.println(arrayList);//[AA, BB, 123, Wed Oct 05 17:18:36 CST 2022, DD, 789] System.out.println(arrayList.remove(789));//true System.out.println(arrayList);//[AA, BB, 123, Wed Oct 05 17:26:58 CST 2022, DD] Object[] objects = arrayList.toArray(); for (int i = 0; i < objects.length; i++) { System.out.println(objects[i]); } System.out.println(vector.contains(789));//true System.out.println(vector.contains(678));//false for (Object o : vector) { System.out.println(o); } System.out.println("=========iterator=========="); Iterator iterator = vector.iterator(); while (iterator.hasNext()) { Object o = iterator.next(); if (o.equals(789)) { iterator.remove(); } System.out.println(iterator.next());//DD 789 } vector.clear(); System.out.println(vector.size());//0 System.out.println(vector.isEmpty());//true for (Object o : arrayList) { } } @Test public void test2() { List list = new ArrayList(); list.add(1); list.add(2); list.add(3); updateList(list); System.out.println(list);//[1, 2] } private static void updateList(List list) { list.remove(2); } @Test public void test3() { LinkedList linkedList = new LinkedList(); linkedList.add("AA"); linkedList.add("BB"); linkedList.add("CC"); linkedList.addFirst("first"); linkedList.addLast("last"); System.out.println(linkedList);//[first, AA, BB, CC, last] System.out.println(linkedList.getFirst());//first System.out.println(linkedList.getLast());//last linkedList.removeFirst(); linkedList.removeLast(); System.out.println(linkedList);//[AA, BB, CC] } }
题目02
//在List内去除重复数字值,要求尽量简单
@Test public void test4() { List list = new ArrayList(); list.add(new Integer(1)); list.add(new Integer(2)); list.add(new Integer(2)); list.add(new Integer(4)); list.add(new Integer(4)); List list2 = duplicateList(list); for (Object integer : list2) { System.out.println(integer); } } public static List duplicateList(List list) { //在List内去除重复数字值,要求尽量简单 HashSet set = new HashSet(); set.addAll(list);//把List内含有重复数字值的集合,添加到HashSet里,自动就去重了 return new ArrayList(set);//把新的集合set传到ArrayList里面 }
题目03
map集合测试
@Test public void test5() { HashMap hashMap = new HashMap(); hashMap.put(001, "AA"); hashMap.put(002, "BB"); hashMap.put(003, "CC"); System.out.println(hashMap.size());//3 System.out.println("map的所有的value:"); Collection values = hashMap.values(); Iterator iterator = values.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } System.out.println("map的所有key:"); Set keys = hashMap.keySet(); for (Object key : keys) { System.out.println(key + "->" + hashMap.get(key)); } System.out.println("map所有的映射关系:"); // 映射关系的类型是Map.Entry类型,它是Map接口的内部接口 Set mappings = hashMap.entrySet(); for (Object mapping : mappings) { Map.Entry entry = (Map.Entry) mapping; System.out.println("key是:" + entry.getKey() + ",value是:" + entry.getValue()); } }
题目04
/* 请从键盘随机输入10个整数保存到List中,并按倒序、从大到小的顺序显示出来 */
package com.jerry.exer; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; /** * @author jerry_jy * @create 2022-10-06 10:28 */ public class Exer1 { /* 请从键盘随机输入10个整数保存到List中,并按倒序、从大到小的顺序显示出来 */ public static void main(String[] args) { ArrayList list = new ArrayList(); System.out.println("请从键盘随机输入10个整数:"); for (int i = 0; i < 10; i++) { Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); list.add(num); } System.out.println("原始的list:" + list); Collections.reverse(list); System.out.println("反转后的:" + list); } }
题目05
/* 请把学生名与考试分数录入到集合中,并按分数显示前三名成绩学员的名字。 TreeSet(Student(name,score,id)) */
package com.jerry.exer; import java.util.TreeSet; /** * @author jerry_jy * @create 2022-10-06 16:15 */ public class Exer2 { public static void main(String[] args) { TreeSet<Student> set = new TreeSet<>(); set.add(new Student("Jerry", 99, 1001)); set.add(new Student("Tom", 76, 1002)); set.add(new Student("Lily", 86, 1003)); set.add(new Student("Luke", 59, 1004)); set.add(new Student("Cherry", 100, 1005)); set.add(new Student("Jim", 98, 1006)); // System.out.println(set.toString()); Object[] objects = set.toArray(); for (int i = 0; i < 3; i++) { System.out.println(objects[i]); } } } class Student implements Comparable{ private String name; private double score; private int id; public Student() { } public Student(String name, double score, int id) { this.name = name; this.score = score; this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", score=" + score + ", id=" + id + '}'; } @Override public int compareTo(Object o) { if (o != null){ Student s = (Student) o; return -Double.compare(this.getScore(), s.getScore()); } throw new RuntimeException("传入的数据类型不一致!"); } }
题目06
/* 定义一个Collection接口类型的变量,引用一个Set集合的实现类,实现添加单个元素,添加另一个集合,删除元素,判断集合中是否包含一个元素,判断是否为空,清除集合,返回集合里元素的个数等常用操作。 */
package com.jerry.exer1; import java.util.Collections; import java.util.HashSet; /** * @author jerry_jy * @create 2022-10-06 16:54 */ public class Exer1 { public static void main(String[] args) { HashSet set = new HashSet(); System.out.println("======添加单个元素======"); set.add("AA"); set.add("BB"); System.out.println(set);//[AA, BB] HashSet set1 = new HashSet(); set1.add("CC"); set1.add("DD"); System.out.println("=======添加另一个集合========"); set.addAll(set1); System.out.println(set);//[AA, BB, CC, DD] System.out.println("=======删除元素========"); set.remove("DD"); System.out.println(set);//[AA, BB, CC] System.out.println("=======判断集合中是否包含一个元素========"); System.out.println(set.contains("CC"));//true System.out.println("=======判断是否为空========"); System.out.println(set.isEmpty());//false System.out.println("=======返回集合里元素的个数========"); System.out.println(set.size());//3 System.out.println("=======清除集合========"); set.clear(); System.out.println(set.isEmpty());//true } }
题目07
/*创建Set接口的实现类,添加10个以上的元素,通过Iterator遍历此集合元素。*/
package com.jerry.exer1; import java.util.HashSet; import java.util.Iterator; /** * @author jerry_jy * @create 2022-10-06 17:21 */ public class Exer2 { /*创建Set接口的实现类,添加10个以上的元素,通过Iterator遍历此集合元素。*/ public static void main(String[] args) { HashSet set = new HashSet(); //添加10个以上的元素 for (int i = 0; i < 10; i++) { set.add(i); } //通过Iterator遍历此集合元素 Iterator iterator = set.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }
题目08
/*创建Set接口的实现类,添加10个以上的元素,通过foreach遍历此集合元素。*/
package com.jerry.exer1; import java.util.HashSet; /** * @author jerry_jy * @create 2022-10-06 17:25 */ public class Exer3 { /*创建Set接口的实现类,添加10个以上的元素,通过foreach遍历此集合元素。*/ public static void main(String[] args) { HashSet set = new HashSet(); //添加10个以上的元素 for (int i = 0; i < 10; i++) { set.add(i); } //通过foreach遍历此集合元素 for (Object o : set) { System.out.println(o); } } }
题目09
/*创建Set接口的实现类,添加10个以上的元素,要求能够排序。*/
package com.jerry.exer1; import java.util.Collections; import java.util.HashSet; /** * @author jerry_jy * @create 2022-10-06 17:27 */ public class Exer4 { /*创建Set接口的实现类,添加10个以上的元素,要求能够排序。*/ public static void main(String[] args) { HashSet set = new HashSet(); //添加10个以上的元素 for (int i = 0; i < 10; i++) { set.add(i); } } }
题目10
/*创建Car类,包含name,price属性,构造器等方法,创建测试类,在main方法中创建Set接口的实现类,添加5个以上的Car对象,遍历集合元素,验证重复元素是否过滤了;如果没有过滤,实现过滤功能;把每个小车的price降10000元,再遍历,查看price是否已改变*/
package com.jerry.exer1; import java.util.HashSet; /** * @author jerry_jy * @create 2022-10-06 17:34 */ public class Exer5 { public static void main(String[] args) { HashSet set = new HashSet(); Car byd = new Car("BYD", 139999); Car bmw = new Car("BMW", 339999); Car farrier = new Car("Farrier", 939999); Car audi = new Car("Audi", 239999); Car benz = new Car("Benz", 439999); set.add(byd); set.add(bmw); set.add(farrier); set.add(audi); set.add(benz); set.add(benz);//重复添加,会失败的 System.out.println(set); System.out.println("=====把每个小车的price降10000元,再遍历========"); byd.setPrice(byd.decreasePrice()); bmw.setPrice(bmw.decreasePrice()); farrier.setPrice(farrier.decreasePrice()); audi.setPrice(audi.decreasePrice()); benz.setPrice(benz.decreasePrice()); System.out.println(set); } } class Car { private String name; private double price; public Car() { } public Car(String name, double price) { this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Car{" + "name='" + name + '\'' + ", price=" + price + '}'; } public double decreasePrice(){ return price-10000; } }
题目11
/*定义一个Collection接口类型的变量,引用一个List集合的实现类,实现添加单个元素,添加另一个集合,删除元素,判断集合中是否包含一个元素,判断是否为空,清除集合,返回集合里元素的个数等常用操作。*/
package com.jerry.exer1; import java.util.ArrayList; import java.util.HashSet; /** * @author jerry_jy * @create 2022-10-06 17:50 */ public class Exer6 { public static void main(String[] args) { ArrayList list = new ArrayList(); System.out.println("======添加单个元素======"); list.add("aa"); list.add("bb"); list.add("cc"); System.out.println(list);//[aa, bb, cc] System.out.println("=======添加另一个集合========"); ArrayList list1 = new ArrayList(); list1.add("dd"); list1.add("ee"); list.addAll(list1); System.out.println(list);//[aa, bb, cc, dd, ee] System.out.println("=======删除元素========"); list.remove("ee"); System.out.println(list);//[aa, bb, cc, dd] System.out.println("=======判断集合中是否包含一个元素========"); System.out.println(list.contains("dd"));//true System.out.println("=======判断是否为空========"); System.out.println(list.isEmpty());//false System.out.println("=======返回集合里元素的个数========"); System.out.println(list.size());//4 System.out.println("=======清除集合========"); list.clear(); System.out.println(list.isEmpty());//true } }
题目12
/*创建ArrayList实例化对象,添加10个以上的元素,在2号位插入一个元素,获得5号位元素,删除6号位元素,修改7号位的元素;*/
package com.jerry.exer1; import java.util.ArrayList; /** * @author jerry_jy * @create 2022-10-06 17:56 */ public class Exer7 { public static void main(String[] args) { ArrayList list = new ArrayList(); for (int i = 0; i < 10; i++) { list.add(i); } System.out.println("=====原来的list====="); System.out.println(list); System.out.println("=====在2号位插入一个元素====="); list.add(1, "new"); System.out.println(list); System.out.println("=====获得5号位元素====="); System.out.println(list.get(4));//3 System.out.println("=====删除6号位元素====="); System.out.println(list.remove(6));//5 System.out.println(list); System.out.println("=====修改7号位的元素====="); list.remove(6); list.add(6, "new_7"); System.out.println(list); } }
题目13
/*通过四种方法遍历集合*/
package com.jerry.exer1; import java.util.ArrayList; import java.util.Iterator; /** * @author jerry_jy * @create 2022-10-06 18:04 */ public class Exer8 { /*通过四种方法遍历集合*/ public static void main(String[] args) { ArrayList list = new ArrayList(); for (int i = 0; i < 10; i++) { list.add(i); } System.out.println("for 方式一"); Object[] array = list.toArray(); for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } System.out.println("iterator 方式二"); Iterator iterator = list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } System.out.println("for each方式三"); for (Object o : list) { System.out.println(o); } System.out.println("直接打印list 方式四"); System.out.println(list); } }
题目14
/*创建LinkedList实例化对象,练习具有队列特点的方法*/
package com.jerry.exer1; import java.util.Collections; import java.util.LinkedList; /** * @author jerry_jy * @create 2022-10-06 18:08 */ public class Exer9 { /*创建LinkedList实例化对象,练习具有队列特点的方法*/ public static void main(String[] args) { LinkedList linkedList = new LinkedList(); linkedList.add("AA"); linkedList.add("BB"); linkedList.add("CC"); linkedList.addFirst("first"); linkedList.addLast("last"); System.out.println(linkedList);//[first, AA, BB, CC, last] System.out.println(linkedList.getFirst());//first System.out.println(linkedList.getLast());//last linkedList.removeFirst(); linkedList.removeLast(); System.out.println(linkedList);//[AA, BB, CC] Collections.reverse(linkedList); System.out.println(linkedList);//[CC, BB, AA] } }
题目15
/*按要求实现下列问题: 1)封装一个新闻类,包含标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题;(10分) 2)只提供一个带参数的构造器,实例化对象时,只初始化标题;并且实例化两个对象: 新闻一:中国多地遭雾霾笼罩空气质量再成热议话题 新闻二:春节临近北京“卖房热” 3)将新闻对象添加到ArrayList集合中,并且使用ListIterator倒序遍历; 4)在遍历集合过程中,对新闻标题进行处理,超过15字的只保留前14个,然后在后边加“…” 5)在控制台打印遍历出经过处理的新闻标题; */
package com.jerry.exer1; import java.util.ArrayList; import java.util.Iterator; /** * @author jerry_jy * @create 2022-10-06 18:11 */ public class Exer10 { public static void main(String[] args) { News news1 = new News("新闻一:中国多地遭雾霾笼罩空气质量再成热议话题"); News news2 = new News("新闻二:春节临近北京“卖房热”"); ArrayList<News> list = new ArrayList<>(); list.add(news1); list.add(news2); Iterator<News> iterator = list.iterator(); while (iterator.hasNext()) { if (iterator.next().getTitle().length() > 15) { int len = iterator.next().getTitle().length() - 1; String substring = iterator.next().getTitle().substring(0, len - 1); // System.out.println(substring); iterator.next().setTitle(substring+ "..."); } else { System.out.println(iterator.next()); } } } } class News { private String title; private String content; public News() { } public News(String title) { this.title = title; } public News(String title, String content) { this.title = title; this.content = content; } 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; } @Override public String toString() { return "News{" + "title='" + title + '\'' + '}'; } }
面试01
Collection 和 Collections的区别
答:Collection是集合类的上级接口,继承于他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
面试02
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别 答:Set里的元素是不能重复的,用equals()方法判读两个Set是否相等 equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
面试03
List, Set, Map是否继承自Collection接口
答: List,Set是,Map不是
面试04
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
答:不对,有相同的hash code
值相同,Hash Code一定相同
HashCode相同,那么值不一定同。
面试05
说出ArrayList,Vector, LinkedList的存储性能和特性
答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
面试06
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算法都大概一样,所以性能不会有很大的差异。
面试07
ArrayList和Vector的区别
答:就ArrayList与Vector主要从二方面来说.
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
面试08
你所知道的集合类都有哪些?主要方法?
答:最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
面试09
以下代码的运行结果? public static void main(String[] args) { Integer[] datas = {1,2,3,4,5}; List<Integer> list = Arrays.asList(datas); list.add(5); System.out.println(list.size()); }
运行异常,不允许添加元素 Arrays.asList(…) 方法返回的 List 集合,既不是 ArrayList 实例,也不是 Vector 实例。 Arrays.asList(…) 返回值是一个固定长度的 List 集合
–end–