好贷网好贷款

Java学习第14天:集合框架零接触和基本理解(List和Set)

发布时间:2016-12-4 7:52:19 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Java学习第14天:集合框架零接触和基本理解(List和Set)",主要涉及到Java学习第14天:集合框架零接触和基本理解(List和Set)方面的内容,对于Java学习第14天:集合框架零接触和基本理解(List和Set)感兴趣的同学可以参考一下。

------- android培训、java培训、期待与您交流! ---------- Until14 集合框架 1、体系概念 2、共性方法 3、迭代器 4、List集合共性方法 5、Vector的枚举 6、LinkedList 7、练习 8、练习 9、练习 10、HashSet 11、HashSet存储自定义对象 12、HashSet判断和删除的依据   体系概念 为什么出现集合类?(为了存储对象) 面向对象语言对食物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。   数组和集合类同时容器,不同的地方在哪?(存的东西和长度不同) 数组虽然也可以存储对象,但长度是固定的;集合长度是可变的 数组中可以存储基本数据类型,集合只能存储对象   集合类的特点(值存对象,长度可变) 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象   为什么会出现这么多容器分类? 因为每一个容器对数据的存储方式不同!我们称之为:数据结构 共性方法 需求 方法 注解 添加元素 Add Add方法中的参数内省是obj,这样可以添加不同类型的值 获取长度 Size   删除元素 Remove   清空集合 Clear   判断元素 Cointains     removerAll 删除交集   retainAll 去交集   迭代器 public class Demo_01 { public static void main(String[] args) { // 集合迭代器 ArrayList<String> al = new ArrayList<String>(); al.add("java01"); al.add("java02"); al.add("java03"); Iterator<String> it = al.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } } List集合共性方法 List集合是有序可重复的(因为有索引) Set集合是无序比且元素不可以重复 【有序无序是存入和去除顺序不一定】 List的特有方法其实就是对角标的操作(获取get,修改是set) 需求 方法 注解 添加 Add(index,element); addAll(index,collection)   删除 Remove(index)   修改 Set(index,element)   查找 Get(index); subList(from,to); listIterator()   Iterator有三个方法...hasNext \ next \ remove List中有它特有的迭代器:ListIterator(可以进行添加add、设置set等操作) 它是iterator的子接口来的! 迭代时,不能用集合对象的方法操作集合中的元素! 会发生ComcumentModificationException异常! hasPrevious 前面是否有元素 hasNext 后面是是否有元素 集合 注释 注释 是否同步 ArrayList 底层使用数组结构 查找快、操作慢 不同步 LinkList 底层使用链表结构 查找慢、操作块 同步 Vector 和LinkList数据结构相同 同步   Vector的枚举 枚举是Vector特有的迭代去除方式:Enumeration public class Demo_2_Vector { public static void main(String[] args) { // 演示下Vector特有的去除方式 Vector<String> v = new Vector<String>(); v.add("Java1"); v.add("Java2"); v.add("Java3"); //特有的过时迭代器!感觉名字好长·用起来也不方便 Enumeration<String> e = v.elements(); while(e.hasMoreElements()) { System.out.println(e.nextElement()); } } } LinkedList 需求 方法(1.6前) 方法 注解 添加 addFrist(); addLast(); offerFrits(); offerLast();   删除 removeFrits(); removeLats(); pollFrits(); poolLast(); 打印并且移除! 查找 getFrist(); getLats() peekFrits(); peekLats();   如果集合中的没有需要的元素在1.6版本之前是返回NoSuchElementsException异常,1.6之后是返回Null值   练习 1、 public class Demo_Collection_LinkList { /** *使用LinkList模拟一个堆栈火队列数据结构 堆栈:先进后出(如果杯子) 队列:先进先出(如同水管) */ public static void main(String[] args) { LinkedList<String> ll = new LinkedList<String>(); //堆栈 ll.addFirst("java_01"); ll.addFirst("java_02"); ll.addFirst("java_03"); Iterator<String> it = ll.iterator(); while(it.hasNext()){ System.out.println(it.next()); } LinkedList<String> l = new LinkedList<String>(); //队列 l.addLast("java_01"); l.addLast("java_02"); l.addLast("java_03"); Iterator<String> itt = l.iterator(); while(itt.hasNext()){ System.out.println(itt.next()); } } } 2、 public class Demo_Collection_ArrayList { /** * 去除ArrayList中重复元素 注意:在写next()的时候不能同时写两次!  若不先进行判断,是无法知道下一个角标是否有元素的!会报错 */ public static void main(String[] args) { ArrayList<String> al = new ArrayList<String>(); al.add("java_01"); al.add("java_01"); al.add("java_02"); al.add("java_02"); al.add("java_03"); al.add("java_04"); System.out.println(al); al = singleElement(al); System.out.println(al); } public static ArrayList singleElement(ArrayList al){ ArrayList<String> temp = new ArrayList<String>(); Iterator<String> it = al.iterator(); while(it.hasNext()){ String s = it.next(); if(!temp.contains(s)) temp.add(s); } return temp; } } 3、 public class Deno_Collection_Array { /** * 自定义对象作为元素存到ArrayList中,并去除重复元素   假如:自定义一个Person对象!同名同岁的十一个人! Instanceof() 类型判断方法   覆写equals()方法【该方法底层自动调用!】   Remove和contains!都是底层调用了equals方法的! */ public static void main(String[] args) { ArrayList<Person> al = new ArrayList<Person>(); al.add(new Person("张三",20)); al.add(new Person("老胡",23)); al.add(new Person("张三",20)); al.add(new Person("贝贝",20)); al.add(new Person("涵妮",44)); al = ss(al); Iterator<Person> it = al.iterator(); while(it.hasNext()){ Person p =it.next(); System.out.println(p.getName()+"...."+p.getAge()); } } public static ArrayList<Person> ss(ArrayList<Person> al){ ArrayList<Person> temp = new ArrayList<Person>(); Iterator<Person> itt = al.iterator(); while(itt.hasNext()){ Person s = itt.next(); if(!temp.contains(s)) temp.add(s); } return temp; } } class Person{ private String name; private int age; Person(String name,int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { if(!(obj instanceof Person)) return false; Person p = (Person)obj; return this.name.equals(p.name) && this.age==p.age; } public String getName() { return name; } public int getAge() { return age; } } HashSet Set基本功能和共性在介绍collection的时候已经差不多了! 而hashSet调用的数据结构是哈希表! *哈希致相同!比较对象   Hashset的比较: 1、先自动调用hashcode() 2、若1相同的情况下用equals() 以上两个条件和方法保证了元素的唯一性           注意一点:覆写equals()的时候注意参数!一定是Object 而对于判断元素!(记住contains和remove)依据是以上两个方法!  ------- android培训、java培训、期待与您交流! ----------

上一篇:poj1716 Integer Intervals(贪心)
下一篇:solr学习第二课----solr安装部署

相关文章

相关评论