java基础重点存储的容器面向对象语言事物体现都是形式所以为_第1页
java基础重点存储的容器面向对象语言事物体现都是形式所以为_第2页
java基础重点存储的容器面向对象语言事物体现都是形式所以为_第3页
java基础重点存储的容器面向对象语言事物体现都是形式所以为_第4页
java基础重点存储的容器面向对象语言事物体现都是形式所以为_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

对象的操作,对象,集合是对象最常用的式。集合的出现就是为了持有对象。集合中可以任意类型的对象,而且长度可变。在程序中有可能无法预先知道需要多少个对象那么用数组来装对象的话长度不好定义而集数组中数据类型是单一的,集合中可以任意类型的对象。用于对象,长度是可变的,可以不同类型的对象类型单一的数据容器,操作复杂(数组一旦好不可变Java工程师对不同的容器进行了定义,虽然容器不同,但是还是有一些共性可以抽取层里边具有最共性,最基本的行为。具体的使用,就要选择具体的容器了。为什么因为不断向上抽取的东西有可能是不能创建对象的.抽象的可能性很大,并且子类对象的方法一些.所以是看顶层,Collection---|List:有顺序,可重 数组实现查找快由于是数组实现组增容以及拷贝元素接按索引查找---|LinkedList:链表实现增删快由于链表实现自己就可以删除时让前一个元素记住后一个元素后一个元素记住前一个元素效率较高但查询时需要一个一个的遍历率---|Vector:和ArrayList原理相同但线程安全效率略低和ArrayList实现方式相同问题---|Set: 顺序,不可重---|---|Map数据结构(datastructure)注意集合和数组中存放的都是对象的注意:集合和数组中存放的都是对象的而非对象本如果我们需要保留顺序,并且保留重复元素,使用如果查询较多,ArrayList如果存取较多LinkedList如果需要线程安全,Vector如果我们不需要保留顺序,并且需要去掉重复元素,使如果我们需要将元素排序如果我们不需要排序HashSet,比如果我们需要保留顺序,又要过滤重复元素,LinkedHashSetCollection中描述的是集合共有的功能(CRUD)List可存放重复元素,元素存取是有序的---| ----|List接 可以有重复元素的集----|Set接 不可以有重复元素的集学习Collection中的共性方法,多个容器在不断向上抽取就出现了该体系。发现apiCollectionjava.util中(ET之类的类型,object因为涉及到了泛型.3:创建集合对象,CollectionListArrayList1:Collectioncoll=new1:add()addObject2:addAll(3:remove()5:clear(6:isEmpty(7:contains()判断集 是否包含指定对)获取获取:9:int10toArray()publicstaticvoidpublicstaticvoidmain(String[]args){Collectionlist=newArrayList();//增加:add()将指定对 计算机网络现代操作系统java编程思想//增加2将list容器元素添加到list2容器中Collectionlist2=newArrayList(); //[java 技术计算机网络现代操作系统java编程思想java语言}删除1booleanremove=list2.remove("javaSystem.out.println(remove);//trueSystem.out.println(list2);////删除2removeAll(将listbooleanremoveAll=list2.removeAll(list);publicstaticvoidpublicstaticvoidmain(String[]args){Collectionlist=newArrayList();//增加:add()将指定对 clear(清空集合中的所有元素System.out.println(list);//[]}publicstaticvoidpublicstaticvoidmain(String[]args){Collectionlist=newArrayList();//增加:add()将指定对 booleanempty=System.out.println(empty);//booleancontainslist.contains("java编程思想");System.out.println(contains);//trueCollectionlist2newArrayList();booleancontainsAll=list.containsAll(list2);System.out.println(containsAll);//false}publicstaticvoidpublicstaticvoidmain(String[]args){Collectionlist=newArrayList();//增加:add()将指定对 获取intsize=} 1:和 类对象,并且和相同就返回true{privateStringprivateint()}(Stringname,intage)=this.age=}publicinthashCode().hashCode()+}publicbooleanequals(Objectobj)类publicpublicstaticvoidmain(String[]args)p1= ",p2= ",p3= ",Collectionlist=newArrayList();//isEmpty()判断集合是否为空booleanemptylist.isEmpty();intsize=list.size();//contains()判断集 booleancontains=ifif(!(objinstanceofreturnfalse;}))p= ).equals()&&this.age==}publicStringtoString()return :name="+name+",age="+}}}}clear(remove() classBook{privateStringprivatedoublepublicBook()}publicBook(Stringname,doubleprice)=this.price=}publicStringgetName()return}publicvoidsetName(Stringname)=}publicdoublegetPrice()return}publicvoidsetPrice(doubleprice)this.price=}publicinthashCode()return(int)(.hashCode()+}publicbooleanequals(Objectobj)if(!(objinstanceofBook))return}Bookbook=(Book).equals()&&this.price==}publicpublicStringtoString()return"book:@name:"++",price:"+}}publicclassDemo1publicstaticvoidmain(String[]args){Collectioncol=newArrayList();col.add(newBook("thinkinjava",100));col.add(newBook("corejava",200));}}---|---|Itor----|索11voidadd(intindexEelementbooleanaddAll(intindexCollectioncEremove(intindexEset(intindexEelement)Eget(intintindexOf(Objecto)lastIndexOf(Object注意:找不到返回-List<EsubList(intfromIndexinttoIndexpublicpublicstaticvoidmain(String[]args){Listlist=newArrayList();//增加:add()将指定对 //add,在0角标位置添加一本书list.add(0,"和");在list2集合的1角标位置添加list集合元素Listlist2=newArrayList(); 史booleanaddAll=list2.addAll(1,list);System.out.println(addAll);//true}publicpublicstaticvoidmain(String[]args){Listlist=newArrayList();//增加:add()将指定对象到容器 删除0Objectremove=list.remove(0);}publicpublicstaticvoidmain(String[]args)ListListlist=new//增加:add()将指定对象到容器 修改2角标位置的书,返回的原来2角标位置的书Objectset=list.set(2,"边城");System.out.println(set);//java编程思想}ListListlist=new//增加:add()将指定对 //查找:Eget(intindex)注意角标越界Objectset=list.get(list.size()-1);System.out.println(set)java语言程序设计list.get(list.size()); }publicpublicstaticvoidmain(String[]args){Listlist=newArrayList();//增加:add()将指定对象到容器 ////查找:Eget(intindex)注意角标越界Objectset=list.get(list.size()-1);System.out.println(set)java语言程序设计//list.get(list.size()); indexOf(Objecto返回第一次出现的指定元素的角标intindexOf=list.indexOf("java编程思想");System.out.println(indexOf);//2没有找到,返回-intindexOf2list.indexOf("三国志");System.out.println(indexOf2);//-1lastIndexOfintlastIndexOflist.lastIndexOf("java编程思想");System.out.println(lastIndexOf);//5}--|--|----|------|---------|ArrayList10长60%,((oldCapacity*3)/2+1)---------|数组实现查找快增删慢通过newArrayList(20)显式的指定用于对象的数组的长度。ArrayList是数组实现在增和删的时候会牵扯到数组增容以及拷贝元素所以慢。数组是可以直接按索引查找,所以查找时较快可以考虑0角标未知添加元素那么原来的角标位置的元素需要整体往后移并且数组可能还要增容,一旦增容,就需要要将老数组的内容拷贝到新数组中.所以数组的增删的效率是很低的.

思路思路 3将对象元素进行操作.注意:自定义对象要进行复写toString和equals方法.为什么?因为object是 的父类,object中的toString返回的是哈希值,object类中equals2 5publicpublicclassDemo6publicstaticvoidmain(String[]args){ArrayListarr=newArrayList();p1= ("jack",p2= ("rose",p3=new ("rose",18);ArrayListarr2=newArrayList();for(inti=0;i<arr.size();i++){Objectobj=arr.get(i);p= )if(!(arr2.contains(p))){}}}}{privateStringprivateint ()} (Stringname,intage)=this.age=}publicStringgetName()return}publicvoidsetName(Stringname)=}publicintgetAge()return}publicvoidsetAge(intage)this.age=}publicinthashCode().hashCode()+age*}publicbooleanequals(Objectobj)if(!(obj ))return}p= ).equals()&&this.age==}publicpublicStringtoString()return@name:"++"age:"+}}--|--|----|------|---------|ArrayList10长60%,((oldCapacity*3)/2+1)---------|LinkedListLinkedList:链表实现,增删快,Linkedist:,需要让上一个元素记住下一个元素.保存的有下一个元素的位置.虽然也有角标,但是查找的时候,需要从头往下找,显然是没有数组查找快的.但是,链表在插入新元素的时候,只需要让前一个元素记住新元素,让新元素记住下一个元素就可以了.所以插入很快.由于链表实现,增加时只要让前一个元素记住自己就可以,删除时让前一个元素记住后一个元素,后一个元素记住前一个元素.这样的增删效率较高。addFirst(Ee)addLast(Ee)addFirst(Ee)addLast(Ee)1(1.6) tor()importimportimportpublicclassDemo3publicstaticvoidmain(String[argsLinkedListlist=newLinkedList(); ////list.addLast(null);Stringstr=(String)Stringstr2=(String)Stringstr3=(String)list.get(list.size()-Stringstr4=(String)//Objectelement=list.element();intsize=list.size();}}mportmportimportpublicclassDemo3publicstaticvoidmain(String[argsLinkedListlist=newLinkedList(); 史 torit= while(it.hasNext())Stringnext=(String)it.next();}}}importimportimportpublicclassDemo6publicstaticvoidmain(String[]args){LinkedListlist=newLinkedList(); tordit= while(dit.hasNext()){}}}注意:可以使用该集合去模拟出队列(先进先出)或者堆栈(后进先出)数据结构。////堆栈(后进先出)publicclassDemo3publicstaticvoidmain(String[]args){LinkedListlist=newLinkedList();Stringstr1=(String)list.pop();Stringstr2=(String)list.pop();Stringstr3=(String)list.pop();Stringstr4=(String)list.pop();System.out.println(list.size());//0System.out.println(list);//[]}}importimportpublicclassDemo3publicstaticvoidmain(String[]args){LinkedListlist=newLinkedList();//出队列;//;//;//}}ArrayList和LinkedList的查找的优缺点1、ArrayList是采用动态数组来元素的,它允许直接用下标号来直接查找对应的元都没法满足需求。解决办法:使用set集合。Vector:ArrayList。ArrayList:单线程效率高voidaddElement(EvoidaddElement(E EelementAtintindex)Enumeration EnumerationEnumerationbooleanE publicpublicstaticvoidmain(String[]{VectorVectorv=newVector();System.out.println(v);System.out.println(v.elementAt(2) //Enumerationens=while(ens.hasMoreElements(){System.out.println( ement()}}new如何获取迭代器?Collection(itor(,所CollectionItor接口。而每一个容器都在其内部对该接口进行了内部类的实现。也就是将取 Jdk1.5之后添加的新接口,Collection的父接口.实现了I ble的类就是可迭代的.并且支持增强for循环。该接口只有一个方法即获取迭代器的方法i 可以获取每个容器自身的迭代器I (Itor)5.0itor()方法放入到Ible接口中。CollectionIbleCollection体系都 tor tor(---| ---| ---|List接 可以有重复元素的集---|Set接 不可以有重复元素的集publicinterface Itreable1 tor<T tor()Itreator1:booleanItreator1:boolean2:E用3:void从迭代器指向的集合中移除迭代器返回的最后一个元素(作nextObject,那么返回的时候,objectpublicstaticvoidmain(String[]publicstaticvoidmain(String[]args){ArrayListlist=new//增加:add()将指定对 torit= while(it.hasNext())Stringnext=(String)}}importimportimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()将指定对 fortorit=tor();it.hasNext();)Stringnext=(String)}}}需要取出所有元素时,可以通过循环,javafor循环。因为可以对内存进行一publicclasspublicclassDemo1publicstaticvoidmain(String[]args){Collectioncoll=newArrayList(); torit= while(it.hasNext()){}}}}如果迭代器的指针已经指向了集合的末尾,那么如果再调用next(会返回importimportimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()将指定对 Itorit= while(it.hasNext())Stringnext=(String)it.next();}//Stringnext=(String)//}}importimport publicimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()将指定对 Itorit= while(it.hasNext())////java.lang.IllegalStateExceptionStringnext=(String)it.next();}}}privateclassItrprivateclassItrimplementstor<E>intcursor=intlastRet=-intexpectedModCount=publicbooleanhasNext()returncursor!=}publicEnext()tryEnext=get(cursor);lastRet=cursor++;returnnext;}catch ceptione)thrownew}}publicvoidremove()if(lastRet==-thrownewtryif(lastRet<cursor)lastRet=-1;expectedModCount=modCount;}catch ceptione)thrownew}}} ConcurrentModificationException:当一个集合在循环中即使用引用变量操作集合又使用迭代器操作集合对象,会抛出该异常。importimportjava.util.ArrayList;importjava.util.Collection;importjava.util.I publicclassDemo1{publicstaticvoidmain(String[]args){Collectioncoll=newArrayList(); torit= while(it.hasNext()){}}}如果是List集合,想要在迭代中操作元素可以使用List集合的特有迭代器 ---|I ------|tortor---|I ------|tortorListadd(E 入到next返回的下一个元素的前面(如果有voidset(Eo) nextprevious返回 返回true 对于I tor的子接口ListI tor在迭代list集合时,还可以对元素进行添importimportimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()将指定对 获取List torlit= while(lit.hasNext())Stringnext=(String)lit.next();}}}}importimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()将指定对 获取List torlit= while(lit.hasNext())Stringnext=(String)lit.next();}while(lit.hasPrevious())Stringnext=(String)lit.previous();}}}Setnextpreviousimportimportimport publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()将指定对 torlit=lit.next()lit.next()System.out.println(lit.next())java//nextprevious}}publicclassDemo2publicclassDemo2publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//增加:add()将指定对 torlit=lit.next()lit.next()System.out.println(lit.next())javanext");//}}Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会重复的用于无序(存入和取出的顺序不一定相同)元素,值不能重复到堆上同一个对象的两个是相等的。如果对两个调用hashCode方法,会得到相同的结果,如果对象所属的类没有覆盖Object的hashCode方法的话,,hashCode值是不可能相等的。如果想要让两个不同的对象视为相等的,就必须覆盖Object继下来的hashCodeequalsObjecthashCode方法返回的是该对象的内存同时也需要两个不同对象比较equals方返回true---| ---| for---| ---|List接 可以有重复元素的集---|---|---|Set接 不可以有重复元素的集importimportjava.util.HashSet;importjava.util.I importjava.util.Set;publicclassDemo4publicstaticvoidmain(String[]args)//Set集合存和取的顺序不一致。Seths=newHashSet(); 知识舰船知识世界军事 torit=知识汉和防务while(it.hasNext()){}}}---|---| for---| ---|List接 可以有重复元素的集---|---|---|Set接 不可以有重复元素的集---|HashSet线程不安全,存取速度快。底层是以哈希表边存放的是哈希值。HashSet元素的顺序并不是按照存入时的顺序(和显然不同)由于Set集合是不能存入重复元素的集合。那么HashSet也是具备这一特性的。入的位置。同时也会与其他已经加入的对象的hashCode进行比较,如果没有相等的hashCode,HashSet就会假设对象没有重复出现。hashCode了,equalsfalseHashSet认为新加入的对象没有重复.的哈希值,如果哈希值一样,接着会比较equals方法如果equls结果为true,HashSetequalsfalse就不是同一个元素。hashcode(equals(true时,hashset集合认为这两个元素是equals如果不相同,equals方法的。注意:HashSet集合在判断元素是否相同先判断hashCodebooleancontains(Objectimportjava.util.HashSet;importjava.util.I importjava.util.Set;publicimportjava.util.HashSet;importjava.util.I importjava.util.Set;publicclassDemo4publicstaticvoidmain(String[]args)SetSeths=new知识setSystem.out.println(hs.size());//setbooleanaddhs.add("世界军事falsesetSystem.out.println(hs.size());//4 torit=hs.i while(it.hasNext()){}}}packagepackageimportimport publicclassDemo4publicstaticvoidmain(String[]args){HashSeths=newHashSet(); ("jack",20)); ("rose", ("hmm", ("lilei", ("jack",Itorit=while(it.hasNext()){Objectnext=it.next();}}}自定义对象,并尝试添加重复对象(对象的重复的判定 privateStringprivateintage;(){} (Stringname,intage)=this.age=}publicStringgetName()return}publicvoidsetName(Stringname)=}publicintgetAge()return}publicvoidsetAge(intage)this.age=}publicinthashCode(){System.out.println("hashCode:"+);return.hashCode()+age*37;}publicbooleanequals(Objectobj){System.out.println(this+"---equals---"+obj);if(objinstanceof ){p= ).equals()&&this.age==}elsereturn}}}publicStringtoString()return@name:"++"age:"+}}问题现在有一批数据要求不能重复元素而且要排序ArrayList、LinkedList不能去除重复数据。HashSet可以去除重复,但是是无序。importpublicclassDemo5importpublicclassDemo5publicstaticvoidmain(String[]args){TreeSetts=newTreeSet();System.out.println(ts);//[aaa,bbb,ccc,}}---|---| for---| ---|List接 有序,可以重复,有角标的集---|---|---|Set接 无序,不可以重复的集---|HashSet---|---|TreeSet红-树算法的规则TreeMap集合的构造方法。注意:当Comparable比较方式和Comparator比较方式同时存在时,以要比较次要条件(假设和一直的人为相同的人,如果想要对人按照的大小来相同不同的人是不同的人。此时就需要进行次要条件判断(需要判断只有和同时相等的才可以返回0.)return0了一个接口,叫做Comparable接口.字符串重写了该接口的compareTo方法,所以String对象具备了比较性.那么同样道理,我的自定义元素(例如类,Book类)想TreeSet集合,就需要实现该接口,也就是要让自定义对象具备比较性.compareTocompare方法中的来保证元素的唯一性。ComparablecompareTo()0时,说明两----|----|compareTo(Object----|compareObjecto1Objecto2)importpublicclassDemo4importpublicclassDemo4publicstaticvoidmain(String[argsTreeSetts=newTreeSet(); ("aa",20,"男")); ("bb"18女 ("cc"17男 ("dd"17女 ("dd"15女 ("dd"15女System.out.println(ts.size());//}}implementsComparableprivateStringprivateintprivateString。 ()} (Stringname,intage,Stringgender)=name;this.age=age;this.gender=gender;}publicStringgetName()return}publicvoidsetName(Stringname)=}publicintgetAge()return}publicvoidsetAge(intage)this.age=}publicStringgetGender()return}publicvoidsetGender(Stringgender)this.gender=}publicinthashCode()returnname.hashCode()+age*}publicbooleanequals(Objectobj){System.err.println(this+"equals:"+obj);if(!(objinstanceof )){return}}p=).equals()&&this.age==}publicStringtoString()return [name="+name+",age="+age+",++}publicintcompareTo(Objectobj)p=)System.out.println(this+"if(this.age>p.age)return}if(this.age<p.age)return-} }}importpublicclassDemo5publicstaticvoidmain(String[]args)TreeSetts=newTreeSet(new ts.add(newBook("thinkinjava",100));ts.add(new 技术ts.add(newBook("现代操作系统ts.add(newBook("java就业 ",35));ts.add(newBook("thinkinjava",100));ts.add(newBook("cccinjava",100));}} paratorimplementsComparatorpublicintcompare(Objecto1,Objecto2){Bookb1=(Book)o1;Bookb2=(Book)o2;System.out.println(b1+"comparator"+b2);if(b1.getPrice()>b2.getPrice()){return}if(b1.getPrice()<b2.getPrice())return-}return}}classBookprivateStringprivatedoublepublicBook()}publicStringgetName()return}publicvoidsetName(Stringname)=}publicdoublegetPrice()return}}publicvoidsetPrice(doubleprice)this.price=}publicBook(Stringname,doubleprice)=this.price=}publicStringtoString()return"Book[name="+name+",price="+price+}}例如Stringstr="8101552 TreeSetTreeSet自身具备排序功能。publicpublicclassDemo5publicstaticvoidmain(String[]args){Stringstr="81015527";String[]strs=str.split("");TreeSetts=newTreeSet();for(intx=0;x<strs.length;x++){inty=Integer.parseInt(strs[x]);}}}(Key(valuemap集合中的一个元素。看顶层共性方法找子类特有对象Collection是单列集合Map是双列集合。Map一次存一对元素Collection一次存一个。MapMap一次存入一对元素,是以键值对的形式存在.键与值存在映射关系.一定要保证键的唯interfaceK-此映射所的键的类V映射值的类型KeyValue11的关系,如:门牌号:家老公:老婆---|Map---|HashMap---|TreeMapHashMap替代。hashCodeequals方法。底层是二叉树数据结构。可以对map集合中的键进行排序。需要使用1、Vput(Kkey,V2、putAll(Map<extendsK,extendsVm)关系到此映射中(可选操作 清空集合对1:valueget(key)返1、boolean 2、booleancontainsKey(Objectkey)3、booleancontainsValue(Object 判断集合中是否包含指定Int该案例使用了HashMap,建立了学生和之间的映射关系。并试图添加重复的键importimportimportpublicclassDemo1publicstaticvoidmain(String[]args)Map<String,Integer>map1=newHashMap<String,Integer>();map1.put("jack",20);map1.put("rose",map1.put("lucy",map1.put("java",25);//System.out.println(map1.put("jack",30));Map<StringIntegermap2newHashMap<StringInteger>(); 丰",100); ",20);System.out.println("map2:"+map2);//从指定映射中将所有映射关系 System.out.println("map1:"+map1);}}remove(删除关联对象,指定keyclear(Map<String,Integer>map1=newHashMap<String,Integer>();map1.put("jack",20);map1.put("rose",map1.put("lucy",map1.put("java",25);//System.out.println("value:"+map1.remove("java"));System.out.println("map1:"+Vget(Objectkey通过指定的key对象获取valueintsize(Map<String,Integer>map1=newHashMap<String,Integer>();map1.put("jack",20);map1.put("rose",map1.put("lucy",map1.put("java",25);Vget(Objectkey通过指定的key对象获取valueintsize(System.out.println("value:"+System.out.println("map.size:"+booleanisEmpty(长度为0返回true否则booleancontainsKey(Objectkey判断集合中是否包含指定的//booleancontainsValue(ObjectMap<String,Integer>map1=newHashMap<String,Integer>();map1.put("jack",20);map1.put("rose",map1.put("lucy",map1.put("java",25);System.out.println("isEmpty:"+map1.isEmpty());System.out.println("containskey:"+ 1、map1、map集合中所有的键setSet<K 2、values,Collection<Vvalues()不能获key对3、Map.Entry对 推荐使 重Set<Map.Entry<k,v>>将将map集合中的键值映射关系打包成一个对象getValue获取其键和值。(keySet()importjava.util.HashMap;importjava.util.I importjava.util.Map;importjava.util.Set;publicclassDemo2importjava.util.HashMap;importjava.util.I importjava.util.Map;importjava.util.Set;publicclassDemo2publicstaticvoidmain(String[]args)Map<Integer,String>map=newHashMap<Integer,String>();map.put(1,"aaaa");map.put(2,map.put(3,"cccc");// 式:使用//Set<KkeySet(返回所有的key对象的SetSet<Integer>ks= tor<Integer>it= while(it.hasNext()){Integerkey=it.next();Stringvalue=map.get(key);System.out.println("key="+key+"value="+value);}}}publicstaticvoidmain(String[]args)publicstaticvoidmain(String[]args)Map<Integer,String>map=newHashMap<Integer,String>();map.put(1,"aaaa");map.put(2,map.put(3,//Collection<V>Collection<String>vs=map.values(); tor<String>it=vs.i while(it.hasNext()){Stringvalue=it.next();System.out.println("value="+value);}}第三种方式publicstaticinterfaceSet<Map.Entry<K,V>>Map.EntrygetKeygetValuepublicpublicstaticvoidmain(String[]args)Map<Integer,String>map=newHashMap<Integer,String>();map.put(1,"aaaa");map.put(2,map.put(3,"cccc");Map.Entry//Set<Map.Entry<K,V>>返回的Map.Entry对象的SetMap.Entry包含了key和valueSet<Map.Entry<Integer,String>>es=Itor<Map.Entry<Integer,String>>it=while(it.hasNext())//Map.Entry<Integer,String>en=//Integerkey=Stringvalue=System.System.out.println("key="+key+"value="+}}hashCodeequals方法。packageimportpackageimportjava.util.HashMap;importjava.util.I importjava.util.Map.Entry;importjava.util.Set;publicclassDemo3publicstaticvoidmain(String[]args),String>hm=newHashMap<("jack",20),"1001");("rose",18),("lucy",19),("hmm",17),("ll",25),, ("rose",18),,String>>entrySet= ,String>>it= while(it.hasNext()) ,String>next=it.next();key=next.getKey();Stringvalue=next.getValue();System.out.println(key+"="+value);}}} privateStringprivateint()} (Stringname,intage)=this.age=}publicStringgetName()return}publicvoidsetName(Stringname)=}publicintgetAge()return}publicvoidsetAge(intage)this.age=}publicinthashCode().hashCode()+age*}publicbooleanequals(Objectobj)if(obj )p= ).equals()&&this.age==}elsereturn}}publicpublicStringtoString()return@name:"++"age:"+}}}和TreeSet一样原理,需要让在键位置的对象实现Comparable接口,重写TreeMap集合的构造方法。注意:当Comparable比较方式和Comparator比较方式同时存在时,以要比较次要条件(假设和一直的人为相同的人,如果想要对人按照的大小来相同不同的人是不同的人。此时就需要进行次要条件判断(需要判断只有和同时相等的才可以返回0.)importpublicclassimportpublicclassDemo4publicstaticvoidmain(String[]args){TreeMap<String,Integer>tree=newTreeMap<String, ", ", ", ", ", ",24);}}packagepackage importjava.util.I importjava.util.Map.Entry;importjava.util.Set;importpublicclassDemo3publicstaticvoidmain(String[]args),String>hm=newTreeMap<("jack",20),("rose",18),("lucy",19),("hmm",17),("ll",25),, ("rose",18),,String>>entrySet= ,String>>it= while(it.hasNext()) ,String>next=it.next();key=next.getKey();Stringvalue=next.getValue();System.out.println(key+"="+}}} paratorimplements >publicintp2)if(p1.getAge()>p2.getAge())return-}elseif(p1.getAge()<p2.getAge())return}return}} implements >privateStringprivateintage;(){} (Stringname,intage)=this.age=}publicStringgetName()return}publicvoidsetName(Stringname)=}publicintgetAge()return}publicvoidsetAge(intage)this.age=}publicinthashCode().hashCode()+age*}publicbooleanequals(Objectobj)if(obj )pp=).equals()&&this.age==}elsereturn}}publicStringtoString()return@name:"++"age:"+}publicint p)if(this.age>p.age)return}elseif(this.age<p.age)return-} }}Map的重复健将覆盖旧键,将旧值返回。1list进行二分查找:int//listComparableint ComparatorreverseOrder();ComparatorreverseOrder(Comparator); SetsynchronizedSet(Set<T>s)MapsynchronizedMap(Map<K,V>m)ListsynchronizedList(List<T>可以使用Collection中的toArray方法。注意:是Collection不是Collections工具类传入指定的类型数组即可,该数组的长度最好为集合的size。2 ListList 数据类型,那么asList会将数组中的元素作为集合中importimportjava.util.ArrayList;importjava.util.Collections;importjava.util.Arrays;importjava.util.List;class{publicstaticvoidmain(String[]{ArrayList<Integer>list=newArrayList<Integer>();System.out.println(Collections.binarySearch(list,8)找不到返回-插入点-//反序集合输出Collections.reverselistSystem.out.println(list);System.out.println(Collections.max(list));//fill()//Collections.fill(list,5);System.out.println(list);Integeris[]=newInteger[]{6,7,8};List<Integer>list2=Arrays.asList(is);list.addAll(list2);System.out.println(list);将ListObject[]ins=list.toArray();System.Object[]ins=list.toArray();System.out.println(Arrays.toString(ins));}}问题:定义一个 描述一 Arrays.asList(SetaddAll(listimportjava.util.Arrays;importjava.util.Set;importjava.util.List;importimportjava.util.Arrays;importjava.util.Set;importjava.util.List;import1类{publicStringpublicint}()(Stringname,intage)=name;this.age=age;}publicStringtoString()returngetClass().getName()+":name="++"+}4hashCodepublicinthashCode()return}publicpublicbooleanequals(Objecto)p=if(oinstanceof p=( )o;.equals()&&(this.age==}}classDemo2publicstaticvoidmain(String[]args)[]ps=new[]{new("lucy",20),new("jack",34)("jack",("lili", >list= >set=newHashSet< }}importimport publicimportimport publicclassDemo5publicstaticvoidmain(String[argsArrayListarr=newArrayList();arr.add(newTiger("华南虎"));arr.add(newTiger("东北虎arr.add(newSheep(" torit= while(it.hasNext()){Objectnext=it.next();Tigert=(Tiger)next;}}}classTiger{Stringname;publicTiger()}publicTiger(Stringname)=}publicStringtoString()return"Tiger@name:"+}publicvoideat(){System.out.println(吃羊");}}classSheep{Stringname;publicSheep()}publicSheep(Stringname)=}publicStringtoString()return"Sheep@name:"+}publicvoidpublicvoideat(){System.out.println(吃青草");}}[Tiger@name:[Tiger@name:华南虎Tiger@name:东北虎]Exceptioninthread"main" .gz.map.Sheepcannotbecasttocn. atcn. 原因:任意对象,但是如果需要使用对象的特有方法,转换,如果集合中存入的对象不同,可 类型转换异常出现问题存入的是特定的对象,Object对象,需要强制类型转换,可能诱发类型转换异常.虽然可以再类型转换的时候通过if语句进行类型检查(instanceof),但是效率较低.(例如吃饭的能一种类型的对象.就像给容器贴说明该容器中只能什么样类型的对象。jdk5.0后出现了泛型泛型应用1.集合类<类类型>变量名newpublicpublicclassDemo5publicstaticvoidmain(String[]args)//使用泛型后,规定该集合只能放羊, ArrayList<Sheep>arr=newArrayList<Sheep>();arr.add(newSheep("美羊羊"));arr.add(newSheep("懒洋洋arr.add(new arr.add(newTiger("东北虎")); tor<Sheep>it= while(it.hasNext())使用泛型后,不需要强制类型转换了Sheepnext=it.next();}}}}格式通过<>来指定容器中元素的类型JDK5.0ComparablepackagepackagepublicinterfaceComparablepublicintcompareTo(Object}JDK5.0packagepackagepublicinterfaceComparable<T>publicintcompareTo(T}publicclassDemo6publicpublicclassDemo6publicstaticvoidmain(String[]args) ArrayList<String>arr=newArrayList<String>(); }}细节二publicclassDemo6publicclassDemo6publicstaticvoidmain(String[]args)//泛型类型必须 //ArrayList<int>arr2=newArrayList<Integer>arr2=new}}}publicclassDemo6publicclassDemo6publicstaticvoidmain(String[]args)ArrayList<String>arr=newArrayList<String>(); Stringstr=arr.get(0);}}publicpublicclassDemo6publicstaticvoidmain(String[]args)int[]arr={1,2,3,4,5}privatestaticvoidreverse(Object[]obj)}} public返回值类型函数名}publicpublicstaticvoidmain(String[]args)int[]arr={1,2,3,4,5new}public<T>TgetData(Tdata)return}publicclassDemo6publicpublicclassDemo6publicstaticvoidmain(String[]args)//,int[]arr={1,2,3,4,5new}private<T>voidreverse(T[]arr)intstart=intend=arr.length-for(inti=0;i<arr.length;i++)if(start<end)Ttemp=arr[start];arr[start]=arr[end];arr[end]=temp;}}}}}importpublicclassDemo6publicstaticvoidmain(String[]args)importpublicclassDemo6publicstaticvoidmain(String[]args){Integer[]arr={1,2,3,4,5};newDemo6().reverse(arr);}private<T>voidreverse(T[]arr)intstart=intend=arr.length-for(inti=0;i<arr.length;i++)if(start<end)Ttemp=arr[start];arr[start]=arr[end];arr[end]=temp;}}}}使用泛型方法前需要进行泛型,使用一对尖括号<泛型>,的位置在static后返回当一个类中有多个函数了泛型,那么该泛型的可以在类上。22class类名<泛型}importimpo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论