• 1. Java集合类2018/10/161Java集合类(下)
  • 2. 第2课 Java 基本程序设计2018/10/162Java集合类(下)
  • 3. 第2课 Java 基本程序设计2018/10/163Java集合类(下)
  • 4. 提问ArrayList Vector的不同 ArrayList 和LinkedList的不同 List 和 set的不同 Set可不可以存储null HashSet里存储对象,对象要实现哪二个方法,每个方法的含义是什么. TreeSet的特点,TreeSet中存储对象,对象要实现的方法?2018/10/164Java集合类(下)
  • 5. 学习目标掌握常用数据结构的用法 ArrayList HashSet HashMap Iterator Properties2018/10/165Java集合类(下)
  • 6. 本课内容集合接口 Collection Set List Map 映射 集合实现 Iterator迭代2018/10/166Java集合类(下)
  • 7. 数据结构一般将数据结构分为两大类:线性数据结构和非线性数据结构。线性数据结构有线性表、栈、队列、数组等;非线性数据结构有树和图。2018/10/167Java集合类(下)
  • 8. 线性表线性表的逻辑结构是n个数据元素的有限序列: (a1, a2 ,a3,…an) n为线性表的长度(n≥0),n=0的表称为空表。 数据元素呈线性关系。必存在唯一的称为“第一个”的数据元素;必存在唯一的称为“最后一个”的数据元素;除第一个元素外,每个元素都有且只有一个前驱元素; 除最后一个元素外,每个元素都有且只有一个后继元素。 所有数据元素在同一个线性表中必须是相同的数据类型。2018/10/168Java集合类(下)
  • 9. 线性表线性表按其存储结构可分为顺序表和链表。用顺序存储结构存储的线性表称为顺序表;用链式存储结构存储的线性表称为链表。 将线性表中的数据元素依次存放在某个存储区域中,所形成的表称为顺序表。一维数组就是用顺序方式存储的线性表。2018/10/169Java集合类(下)
  • 10. 链表单向链表datanextdatanextdatanext=nullhead节点2018/10/1610Java集合类(下)
  • 11. 链表datanextdatanextdatanext=nullhead节点插入datanextdatanextdatanexthead节点删除datanext=null2018/10/1611Java集合类(下)
  • 12. 链表循环链表datanextdatanextdatanexthead节点2018/10/1612Java集合类(下)
  • 13. 链表双向循环链表datanextdatanextdatanexthead节点previouspreviousprevious2018/10/1613Java集合类(下)
  • 14. 栈栈(Stack)也是一种特殊的线性表,是一种后进先出(LIFO)的结构。 栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶(top),表头称为栈底(bottom)。 栈的物理存储可以用顺序存储结构,也可以用链式存储结构。 栈的实现 使用栈的消费者和生产者示例 a1a2an…栈底栈顶出栈进栈2018/10/1614Java集合类(下)
  • 15. 队列队列(Queue)是限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表。 表中允许插入的一端称为队尾(Rear),允许删除的一端称为队头(Front)。 队列的操作是按先进先出(FIFO)的原则进行的。 队列的物理存储可以用顺序存储结构,也可以用链式存储结构。 实现a1 a2 a3 … an队头队尾出队 入队2018/10/1615Java集合类(下)
  • 16. Queue接口Queue接口定义了如下几个方法 void add(Object c):将指定元素加入尾部 Object element():获取队列头,但不删除 boolean offer(Object e)将指定元素加入到队列尾,当队列容量有限时,此方法比add(Object t)好 Object peek():获取队列头,但不删除,如果队列为空,返回null Object poll():获取队列头的元素,并删除该元素,如果队列为空,返回null Object remove():获取队列头元素。2018/10/1616Java集合类(下)
  • 17. collections framework概述所有抽象出来的数据结构和操作统称为collections framework框架。Java程序员不必考虑数据结构的算法细节,只需要定义具体应用的数据结构实体。数据结构上的方法也用不着程序员去写,用系统的方法就行了,系统的方法总比一般程序员编的要快 所有这些framework都在java.util包中2018/10/1617Java集合类(下)
  • 18. collections framework重要接口与类在Java 2的Collections框架中,主要包括四个接口及其扩展和实现类: 四个重要接口 Collection接口: Set—不允许重复 List—可以有重复元素 Map: 键-值映射对2018/10/1618Java集合类(下)
  • 19. Collection 层次结构<> Collection+add(element : Object) : boolean +remove(element : Object) : boolean +size() : int +isEmpty() : boolean +contains(element : Object) : boolean +iterator() : Iterator<> SetHashSet<> ListArrayListVectorLinkedList2018/10/1619Java集合类(下)
  • 20. CollectionArrayList非常象Vector ,它实现了可变长的数组。而LinkedList 则有些不同,它是List的链表实现。 LinkedList可以成为堆栈,队列或者双向链表.2018/10/1620Java集合类(下)
  • 21. Collection接口Collection的实现类的实例能够: 增加删除一个元素 查找一个元素是否在此集合中 计算此集合的元素数目 Collection没有约束元素的具体类型(是否为空也未规定) java.util.List接口继承Collection接口定义可以重复的元素集合。 Set,java.util.Set接口继承Collection, 要求无重复的元素。2018/10/1621Java集合类(下)
  • 22. Collection接口Collection是集合继承树中最顶层的接口,定义了以下常用的方法。 boolean add(Object element) boolean remove(Object element) int size() boolean isEmpty() 判断是否存在元素 boolean contains(Object element)判断是否存在某元素 Iterator iterator() Object[] toArray() void clear() boolean addAll(Collection collection)2018/10/1622Java集合类(下)
  • 23. List接口List是一个有序集合,继承了Collection接口并新增了下面一些方法: Public Object get(int index) Public Object set(int index, Object element) Public Object remove(int index) Public int indexOf(Object o) Public int lastIndexOf(Object o) Public List subList(int fromIndex, int toIndex) Pulbic ListIterator listIterator() Public ListIterator listIterator(int index) 具体实现类: ArrayList * LinkedList Vector Stack2018/10/1623Java集合类(下)
  • 24. 数组列表ArrayList在编程中常常会遇到需要动态操纵数组,比如在运行时增加和删除数组元素,而且有时在编译时又不想确定数组大小希望它可以动态伸缩,在java中解决这一问题的方法是使用java.util包中的ArrayList类 ArrayList是List接口的一个可变长数组实现。 2018/10/1624Java集合类(下)
  • 25. 数组列表ArrayListpublic int size();//返回列表中的元素个数 public Object get(int index);//返回指定位置的元素 public Object set(int index, Object obj);//设置指定位置元素 public boolean add(Object obj);//在列表末尾增加元素 public void add(int index, Object obj);//在列表指定位置插入元素 public void clear();//删除列表中所有元素 public Object remove(int index);//删除列表中指定位置元素 public Object contains(Object obj);//判断列表中指定对象是否存在2018/10/1625Java集合类(下)
  • 26. ArrayList示例(ArrayListExample)public class ArrayListExample{ public static void main( String[] args ) { ArrayList al = new ArrayList(); // Create a new ArrayList for( int i=0; i<10; i++ ) { al.add( new Integer( i ) ); // Add Items to the array list } for( int i=0; i27. A List Exampleimport java.util.* public class ListExample { public static void main(String[] args) { List list = new ArrayList(); list.add("one"); list.add("second"); list.add("3rd"); list.add(new Integer(4)); list.add(new Float(5.0F)); list.add("second"); // duplicate, is added list.add(new Integer(4)); // duplicate, is added System.out.println(list); } } Output: [one, second, 3rd, 4, 5.0, second, 4] 2018/10/1627Java集合类(下)
  • 28. Vector和ArrayList区别要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是 最好的选择。你别指望能够获得一个简单肯定答案,因为这要看你用它们干什么。Vector类似于ArrayList.。所有从API的角度来看这两个类非常相似。但他们之间也还是有一些主要的区别的。 同步性 Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。 数据增长 从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。 2018/10/1628Java集合类(下)
  • 29. Vector类Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。 示例2018/10/1629Java集合类(下)
  • 30. Stack类Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。 使用栈生产者和消费者示例2018/10/1630Java集合类(下)
  • 31. LinkedList类 LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。   注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List: List list = Collections.synchronizedList(new LinkedList(...)); 经常把元素插入到列表的中间,或者是顺序访问,优先考虑使用 示例 ArrayList与LinkedList的性能比较 22018/10/1631Java集合类(下)
  • 32. LinkedList ArrayList Vector性能差异public class LinkedListTest { public static void main(String[] args) { LinkedList ll = new LinkedList(); ArrayList al = new ArrayList(); Vector vt = new Vector(); long tl1 = System.currentTimeMillis(); for (int i = 0; i < 1000000; i++) {ll.addFirst(i);} long tl2 = System.currentTimeMillis();System.out.println("LinkedList的时间:" + (tl2 - tl1)); long ta1 = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) {al.add(0, i);} long ta2 = System.currentTimeMillis();System.out.println("ArrayList的时间:" + (ta2 - ta1)); long vt1 = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) {vt.add(0, i);} long vt2 = System.currentTimeMillis();System.out.println("Vector的时间:" + (vt2 - vt1)); }}2018/10/1632Java集合类(下)
  • 33. Set 接口(例:SetTest)Set 接口继承 Collection 接口,而且它不允许集合中存在重复项,每个具体的 Set 实现类依赖添加的对象的 equals()方法来检查独一性。Set接口没有引入新方法,所以Set就是一个Collection,只不过其行为不同。 不能包含重复值,两个元素是否重复的依据是a.equals(b).因此最多只允许一个null存在 不能按照索引访问,因为Set的储存顺序不是有序的 Set的实现类往往有更快的对象操作(增加删除)速度,如: ArrayList查找一个对象是否存在于List中,需要遍历,而HashSet只根据哈希算法进行快速的查找(HashSet元素的储存不是有序的) 2018/10/1633Java集合类(下)
  • 34. Set的实现类HashSet允许插入最多一个null值 不保证元素的顺序与插入的顺序一致,也不能按索引访问. 如果储存元素的分布是均匀的,增删查的速度恒定,且比较高. 加入Set中的元素应该重载Object.hashCode()和Object.equals()方法(所有与哈希表有关的类都应该重载) HashSet是线程不安全的. 如需要同步,用Collections. synchronizedSet(Set set)方法创建一个Set 适用场合:需要储存大量的不可重复元素集合,频繁的增删操作,且不需要记录插入时顺序. 示例 2018/10/1634Java集合类(下)
  • 35. Set 接口(例:SetTest) HashSet h = new HashSet(); h.add("1st"); h.add("2nd"); h.add(new Integer(3)); h.add(new Double(4.0)); h.add("2nd"); // 重复元素, 未被加入 h.add(new Integer(3)); // 重复元素, 未被加入 2018/10/1635Java集合类(下)
  • 36. HashSetHashSet( ) 构造一个默认的散列集合 HashSet(Collection c) 用c中的元素初始化散列集合 HashSet(int capacity) 用capacity初始化散列集合的容量   2018/10/1636Java集合类(下)
  • 37. HashSetHashSet没有定义任何超过它的超类和接口提供的其他方法。 HashSet 判断是否重复的标准是什么?2018/10/1637Java集合类(下)
  • 38. A Set Exampleimport java.util.*; public class SetExample { public static void main(String[] args) { Set set = new HashSet(); set.add("one"); set.add("second"); set.add("3rd"); set.add(new Integer(4)); set.add(new Float(5.0F)); set.add("second"); // duplicate, not added set.add(new Integer(4)); // duplicate, not added System.out.println(set);} } //Output:[one, second, 5.0, 3rd, 4] HashSet以哈希表形式存放,操作速度很快 2018/10/1638Java集合类(下)
  • 39. HashSet例子public class SetHashSet { public static void main(String[] args) { Set s = new HashSet(); Student a = new Student("zhangsan", 21);Student b = new Student("zhangsan", 21); Student c = new Student("zhangsan2", 1);Student d = new Student("lisi", 21); s.add(a);s.add(b);s.add(c);s.add(d);System.out.println(s); }} class Student { String name;int age; public Student(String name, int age) {this.name = name;this.age = age;} public int hashCode() { System.out.println("hashCode");return (name + age).hashCode(); } public boolean equals(Object o) { Student a = (Student) o; return (this.name.equals(a.name) && this.age == a.age); } public String toString() {return (name + " " + age);} }2018/10/1639Java集合类(下)
  • 40. TreeSet TreeSet是有序的,有序按照后面的comparator来计算,要求实现Comparator接口 有序set. 示例2018/10/1640Java集合类(下)
  • 41. TreeSet 示例public class TreeSetTest { public static void main(String[] args) { TreeSet ts = new TreeSet(new StudentsComparator()); ts.add(new Students("111", "zhangsan", 20, 98)); ts.add(new Students("112", "lisi", 22, 80)); ts.add(new Students("113", "wangwu", 25, 85)); ts.add(new Students("114", "zhaoliu", 23, 85));ts.add(new Students("115", "zhaoliu", 28, 85));System.out.println(ts); Iterator it = ts.iterator(); while (it.hasNext()) {System.out.println(it.next());}}} class Students { String id;String name;int age;int grade; public Students(String id, String name, int age, int grade) {this.id = id;this.name = name;this.age = age;this.grade = grade;} public int hashCode() {return id.hashCode();} public boolean equals(Object o) {Students s = (Students) o;return this.id.equals(s.id);} public String toString() {return ("student[" + id + "," + name + "," + age + "," + grade + "]");}} class StudentsComparator implements Comparator { public int compare(Object o1, Object o2) { Students s1 = (Students) o1;Students s2 = (Students) o2;int result = s1.grade > s2.grade ? -1 : (s1.grade == s2.grade ? 0 : 1); if (result == 0) {result = s1.id.compareTo(s2.id);}return result;}}2018/10/1641Java集合类(下)
  • 42. 如何遍历Collection中的每一个元素? 不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。集合遍历Iterator2018/10/1642Java集合类(下)
  • 43. Iterator接口Iterator接口定义了对Collection类型对象中所含元素的遍历等增强处理功能 可以通过Collection接口中定义的iterator()方法获得一个对应的Iterator(实现类)对象 Set (实现类)对象对应的Iterator仍然是无序的2018/10/1643Java集合类(下)
  • 44. Iterator接口层次<> Iterator+hasNext() : boolean +next() : Object +remove() :void<> ListIterator+hasPrevious() : boolean +previous() : Object +add(element : Object):void +set(element : Object) :void 2018/10/1644Java集合类(下)
  • 45. 集合遍历Iterator接口Iterator可实现对集合元素的遍历,有三个方法: boolean hasNext() Object next() void remove() 举例: Collection coll = new ArrayList(); coll.add(“hello”); coll.add(new Double(3.14)); Iterator iterator = coll.iterator(); Object element = null; while (iterator.hasNext()) { element = iterator.next(); System.out.println(element); } 2018/10/1645Java集合类(下)
  • 46. 集合遍历Enumeration提供的两个方法 hasMoreElements() nextElement() 与Iterator 的区别 没有remove()方法 老式的结合遍历方法,已被Iterator取代 Vector类,HashTable类等类使用。 Vector v= new Vector(); Enumeration e = v.elements(); while(e.hasMoreElements()){ Integer iobj = (Integer)e.nextElement(); System.out.println(iobj); sum += iobj.intValue(); 例子2018/10/1646Java集合类(下)
  • 47. 事实上,在J2SE 5.0您也不必须使用iterator()了,使用增强的for循环可以直接遍访List的所有元素,例如: for(String s : list) { System.out.print(s + " "); } 2018/10/1647Java集合类(下)
  • 48. Iterator接口1. 通过调用类集的iterator( )方法获得迭代子实例。 2. 建立一个调用hasNext( )方法的循环,只要hasNext( )返回true,就进行循环迭代。 3. 在循环内部,通过调用next( )方法来得到每一个元素。 2018/10/1648Java集合类(下)
  • 49. 映射(Map) Map是一个维护一组”键---值”映射的类(map keys to values) 一个Map中key的值是唯一的,不重复 (如,不要用员工姓名作为key) 一个Map中一个key只能对应一个value(可以为空),但一个value可以有多个key与之对应 Map能让你通过key快速查找到相应的对象并获得它对应的value的引用(如存储员工资料并用员工ID作为key来查找某一员工的信息) 2018/10/1649Java集合类(下)
  • 50. HashMapHashMap类使用散列表实现Map接口。这允许一些基本操作如get( )和put( )的运行时间保持恒定,即便对大型集合,也是这样的。 HashMap( )构造一个默认的散列映射 HashMap(Map m)用m的元素初始化散列映射 HashMap(int capacity)将散列映射的容量初始化为capacity2018/10/1650Java集合类(下)
  • 51. HashMap class HashMapTest { public static void printElements(Collection c) { Iterator it = c.iterator(); while (it.hasNext()) { System.out.println(it.next());} } public static void main(String[] args) { HashMap hm = new HashMap(); hm.put("one", "zhangsan"); hm.put("two", "lisi"); hm.put("three", "wangwu"); System.out.println(hm.get("one")); System.out.println(hm.get("two")); System.out.println(hm.get("three")); Set keys = hm.keySet(); System.out.println("Key:"); printElements(keys); Collection values = hm.values(); System.out.println("Value:"); printElements(values); Set entry = hm.entrySet(); //printElements(entry); Iterator it = entry.iterator(); while (it.hasNext()) { Map.Entry me = (Map.Entry) it.next(); System.out.println(me.getKey() + ":" + me.getValue()); } } }2018/10/1651Java集合类(下)
  • 52. HashMapHashMap类: 实现Map接口及它的所有可选操作。允许空key和空value. 类似Hashtable,但Hashtable是线程安全的,且不允许空key和空value. 不保证元素的顺序 基本元素操作(put and get)速度恒定。(前提是各“桶”内分布的元素是均匀的) 线程不安全 实现 2018/10/1652Java集合类(下)
  • 53. Dictionary和Hashtable类Dictionary类提供了根据关键字查值的功能。 Dictionary是个abstract的类,因此我们不直接使用它。直接使用的一般是Hashtable类。 HashTable继承了Dictionary类,称为哈希表类2018/10/1653Java集合类(下)
  • 54. Hashtable类如果要取得并显示哈希表中所有记录值,应该用以下程序段 Enumeration enum=table.elements() ; while(enum.hasMoreElements() ) show("Found Elements(not key): "+enum.nextElement() ); 其中的table.elements 取得的是所有哈希表中的对象 如果要取得并显示哈希表中所有关键字的值,就应该这么做 Enumeration enum1=table.keys() ; while(enum1.hasMoreElements() ) show("Key is ->"+enum1.nextElement() ); 其中的table.keys 取得哈希表中所有关键字的值2018/10/1654Java集合类(下)
  • 55. Hashtable类 Hashtable继承Map接口,实现一个key-value映射的哈希表。 任何非空(non-null)的对象都可作为key或者value。 添加数据使用put(key, value), 取出数据使用get(key) Hashtable的方法是Synchronize 线程安全2018/10/1655Java集合类(下)
  • 56. 使用Hashtable的简单示例如下,将1,2,3放到Hashtable中,他们的key分别是”one”,”two”,”three”:     Hashtable numbers = new Hashtable();     numbers.put(“one”, new Integer(1));     numbers.put(“two”, new Integer(2));     numbers.put(“three”, new Integer(3));   要取出一个数,比如2,用相应的key:     Integer n = (Integer)numbers.get(“two”);     System.out.println(“two = ” + n); 2018/10/1656Java集合类(下)
  • 57. Properties 类哈希表里存的关键字/值对可以是各种类型。而Properties就相对简单多了。它只存放字符串对。 Properties用setProperty和getProperty来处理值,此类的值只能是String。 示例1 示例22018/10/1657Java集合类(下)
  • 58. Properties1示例一import java.util.*; import java.io.*; public class TestProperties1 { public static void main(String[] args) { Properties properties = new Properties(); try { properties.load(new FileInputStream("database.properties")); Enumeration e =properties.propertyNames(); while(e.hasMoreElements()){ String key =(String)e.nextElement(); String value = properties.getProperty(key); System.out.println("key is "+key+" and value is"+value); } } catch (IOException e) { } System.out.println(properties.getProperty("jdbc.username")); } } 2018/10/1658Java集合类(下)
  • 59. System Propertiesimport java.util.Properties; import java.util.Enumeration; public class TestProperties { public static void main(String[] args){ Properties props = System.getProperties(); Enumeration prop_names = props.propertyNames(); while ( prop_names.hasMoreElements() ) { String prop_name = (String) prop_names.nextElement(); String property = props.getProperty(prop_name); System.out.println("property ’" + prop_name+ "’ is ’" + property); }}}2018/10/1659Java集合类(下)
  • 60. Hashtable 与 HashMapHashtable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。 Hashtable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。 Hashtable有一个contains(Object value)功能和 HashMap containsValue(Object value)功能一样。Hashtable使用Enumeration,HashMap使用Iterator。2018/10/1660Java集合类(下)
  • 61. Collections工具类排序 sort(List list) sort(List list, Comparator c) List中的对象必须实现Comparator接口,或者显式制定一个比较器2018/10/1661Java集合类(下)
  • 62. 查找 binarySearch(List list, Object key) binarySearch(List list, Object key, Comparator c) List中的对象必须实现Comparator接口,或者显式制定一个比较器 其他方法 找出集合中最大值、最小值 max、min方法,需提供比较器2018/10/1662Java集合类(下)
  • 63. 掌握重点 数组列表和数组有什么不同 Collection接口及其实现类 HashMap ,HashSet , HashTable,ArrayList2018/10/1663Java集合类(下)
  • 64. 总结如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。   如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。   要特别注意对哈希表的操作,作为key的对象要正确重写写equals和hashCode方法。   尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。 2018/10/1664Java集合类(下)
  • 65. 通过键盘输入不定数个数字,选择合适的集合进行存储,进行计算总和。 编写一个student类,包含学号、姓名、年龄、考试成绩等属性,要求重写toString, equals, hashCode方法,学号作为比较依据,并实现Comparable接口;并把几个student对象放入TreeSet中按成绩大小降序存储和输出 编写一个类,从一个文件中读入学生信息。要求:能按学号找到对应的学生,按学生姓名升序输出学生,按学生成绩升序输出学生2018/10/1665Java集合类(下)
  • 66. 问题: 1 ArrayList 和Vector的不同 2 ArrayList 和LinkedList 的不同 3 List 接口和set 接口的不同 4 HashSet的特点 5 数组和List 如何进行互相转换 讲一下互拆和同步及线程安全的概念 2018/10/1666Java集合类(下)