classApple{privatestaticlongcounter;privatefinallongid=counter++;publiclongid(){returnid;}}classOrange{}publicclassApplesAndOrangesWithoutGenerics{@SuppressWarnings("unchecked")publicstaticvoidmain(String[]args){ArrayListapples=newArrayList();for(inti=0;i<3;i++){apples.add(newApple());}apples.add(newOrange());for(inti=0;i<apples.size();i++){((Apple)apples.get(i)).id();//Orange is detected only at run time}}}/*java.lang.ClassCastException: Orange cannot be cast to Apple */
publicclassIndividualimplementsComparable<Individual>{privatestaticlongcounter=0;privatefinallongid=counter++;privateStringname;publicIndividual(Stringname){this.name=name;}// 'name' is optional:publicIndividual(){}publicStringtoString(){returngetClass().getSimpleName()+(name==null?"":" "+name);}publiclongid(){returnid;}publicbooleanequals(Objecto){returnoinstanceofIndividual&&id==((Individual)o).id;}publicinthashCode(){intresult=17;if(name!=null)result=37*result+name.hashCode();result=37*result+(int)id;returnresult;}publicintcompareTo(Individualarg){// Compare by class name first:Stringfirst=getClass().getSimpleName();StringargFirst=arg.getClass().getSimpleName();intfirstCompare=first.compareTo(argFirst);if(firstCompare!=0)returnfirstCompare;if(name!=null&&arg.name!=null){intsecondCompare=name.compareTo(arg.name);if(secondCompare!=0)returnsecondCompare;}return(arg.id<id?-1:(arg.id==id?0:1));}}publicclassPetextendsIndividual{publicPet(Stringname){super(name);}publicPet(){super();}}//🐱publicclassCatextendsPet{publicCat(Stringname){super(name);}publicCat(){super();}}//🐶publicclassDogextendsPet{publicDog(Stringname){super(name);}publicDog(){super();}}//鼠类publicclassRodentextendsPet{publicRodent(Stringname){super(name);}publicRodent(){super();}}//马恩岛🐱publicclassManxextendsCat{publicManx(Stringname){super(name);}publicManx(){super();}}//埃及🐱publicclassEgyptianMauextendsCat{publicEgyptianMau(Stringname){super(name);}publicEgyptianMau(){super();}}//威尔士🐱publicclassCymricextendsManx{publicCymric(Stringname){super(name);}publicCymric(){super();}}//混血🐶publicclassMuttextendsDog{publicMutt(Stringname){super(name);}publicMutt(){super();}}//哈巴🐶publicclassPugextendsDog{publicPug(Stringname){super(name);}publicPug(){super();}}//大🐭publicclassRatextendsRodent{publicRat(Stringname){super(name);}publicRat(){super();}}//仓鼠publicclassHamsterextendsRodent{publicHamster(Stringname){super(name);}publicHamster(){super();}}//小🐭publicclassMouseextendsRodent{publicMouse(Stringname){super(name);}publicMouse(){super();}}publicabstractclassPetCreator{privateRandomrand=newRandom(47);// The List of the different types of Pet to create:publicabstractList<Class<?extendsPet>>types();publicPetrandomPet(){// Create one random Petintn=rand.nextInt(types().size());try{returntypes().get(n).newInstance();}catch(InstantiationExceptione){thrownewRuntimeException(e);}catch(IllegalAccessExceptione){thrownewRuntimeException(e);}}publicPet[]createArray(intsize){Pet[]result=newPet[size];for(inti=0;i<size;i++)result[i]=randomPet();returnresult;}publicArrayList<Pet>arrayList(intsize){ArrayList<Pet>result=newArrayList<Pet>();Collections.addAll(result,createArray(size));returnresult;}}publicclassForNameCreatorextendsPetCreator{privatestaticList<Class<?extendsPet>>types=newArrayList<Class<?extendsPet>>();// Types that you want to be randomly created:privatestaticString[]typeNames={"pets.Mutt","pets.Pug","pets.EgyptianMau","pets.Manx","pets.Cymric","pets.Rat","pets.Mouse","pets.Hamster"};@SuppressWarnings("unchecked")privatestaticvoidloader(){try{for(Stringname:typeNames)types.add((Class<?extendsPet>)Class.forName(name));}catch(ClassNotFoundExceptione){thrownewRuntimeException(e);}}static{loader();}publicList<Class<?extendsPet>>types(){returntypes;}}publicclassLiteralPetCreatorextendsPetCreator{// No try block needed.@SuppressWarnings("unchecked")publicstaticfinalList<Class<?extendsPet>>allTypes=Collections.unmodifiableList(Arrays.asList(Pet.class,Dog.class,Cat.class,Rodent.class,Mutt.class,Pug.class,EgyptianMau.class,Manx.class,Cymric.class,Rat.class,Mouse.class,Hamster.class));// Types for random creation:privatestaticfinalList<Class<?extendsPet>>types=allTypes.subList(allTypes.indexOf(Mutt.class),allTypes.size());publicList<Class<?extendsPet>>types(){returntypes;}publicstaticvoidmain(String[]args){System.out.println(types);}}publicclassPets{publicstaticfinalPetCreatorcreator=newLiteralPetCreator();publicstaticPetrandomPet(){returncreator.randomPet();}publicstaticPet[]createArray(intsize){returncreator.createArray(size);}publicstaticArrayList<Pet>arrayList(intsize){returncreator.arrayList(size);}}
publicclassStackTest{publicstaticvoidmain(String[]args){Stack<String>stack=newStack<String>();for(Strings:"My dog has fleas".split(" ")){stack.push(s);}while(!stack.empty()){System.out.print(stack.pop()+" ");}}}/*fleas has dog My */
publicclassStackTest{publicstaticvoidmain(String[]args){java.util.Stack<String>stack=newjava.util.Stack<String>();for(Strings:"My dog has fleas".split(" ")){stack.push(s);}while(!stack.empty()){System.out.print(stack.pop()+" ");}}}/*fleas has dog My */
publicclassQueueDemo{publicstaticvoidprintQ(Queuequeue){while(queue.peek()!=null){System.out.print(queue.remove()+" ");}System.out.println();}publicstaticvoidmain(String[]args){Queue<Integer>queue=newLinkedList<Integer>();Randomrand=newRandom(47);for(inti=0;i<10;i++){queue.offer(rand.nextInt(i+10));}printQ(queue);Queue<Character>qc=newLinkedList<Character>();for(charc:"Brontosaurus".toCharArray()){qc.offer(c);}printQ(qc);}}/*8 1 1 1 5 14 3 1 0 1B r o n t o s a u r u s */
publicclassPriorityQueueDemo{publicstaticvoidmain(String[]args){PriorityQueue<Integer>priorityQueue=newPriorityQueue<Integer>();Randomrand=newRandom();for(inti=0;i<10;i++){priorityQueue.offer(rand.nextInt(i+10));}QueueDemo.printQ(priorityQueue);List<Integer>ints=Arrays.asList(25,22,20,18,14,9,3,1,1,2,3,9,14,18,21,23,25);priorityQueue=newPriorityQueue<Integer>(ints);QueueDemo.printQ(priorityQueue);//反序priorityQueue=newPriorityQueue<Integer>(ints.size(),Collections.<Integer>reverseOrder());priorityQueue.addAll(ints);QueueDemo.printQ(priorityQueue);//空格也可以算作值,并且比字母的优先级高Stringfact="EDUCATION SHOULD ESCHEW OBFUSCATION";List<String>strings=Arrays.asList(fact.split(""));PriorityQueue<String>stringPQ=newPriorityQueue<String>(strings);QueueDemo.printQ(stringPQ);stringPQ=newPriorityQueue<String>(strings.size(),Collections.<String>reverseOrder());stringPQ.addAll(strings);QueueDemo.printQ(stringPQ);Set<Character>charSet=newHashSet<Character>();for(charc:fact.toCharArray()){charSet.add(c);}PriorityQueue<Character>characterPQ=newPriorityQueue<Character>(charSet);QueueDemo.printQ(characterPQ);}}/*2 3 3 4 4 5 5 7 7 9 1 1 2 3 3 9 9 14 14 18 18 20 21 22 23 25 25 25 25 23 22 21 20 18 18 14 14 9 9 3 3 2 1 1 A A B C C C D D E E E F H H I I L N N O O O O S S S T T U U U W W U U U T T S S S O O O O N N L I I H H F E E E D D C C C B A A A B C D E F H I L N O S T U W */
publicclassForEachCollections{publicstaticvoidmain(String[]args){Collection<String>cs=newLinkedHashSet<String>();Collections.addAll(cs,"Take the long way home".split(" "));for(Strings:cs){System.out.print("'"+s+"' ");}}}/*'Take' 'the' 'long' 'way' 'home' */
publicclassIterableClassimplementsIterable<String>{protectedString[]words=("And that is how "+"we know the Earth to be banana-shaped.").split(" ");publicIterator<String>iterator(){returnnewIterator<String>(){privateintindex=0;publicbooleanhasNext(){returnindex<words.length;}publicStringnext(){returnwords[index++];}publicvoidremove(){thrownewUnsupportedOperationException();}};}publicstaticvoidmain(String[]args){for(Strings:newIterableClass()){System.out.println(s+" ");}}}/*'Take' 'the' 'long' 'way' 'home' */
publicclassArrayIsNotIterable{static<T>voidtest(Iterable<T>ib){for(Tt:ib){System.out.print(t+" ");}}publicstaticvoidmain(String[]args){test(Arrays.asList(1,2,3));String[]strings={"A","B","C"};//// test(strings);test(Arrays.asList(strings));}}/*1 2 3 A B C */
publicclassReversibleArrayList<T>extendsArrayList<T>{publicReversibleArrayList(Collection<T>c){super(c);}publicIterable<T>reversed(){returnnewIterable<T>(){publicIterator<T>iterator(){returnnewIterator<T>(){intcurrent=size()-1;publicbooleanhasNext(){returncurrent>-1;}publicTnext(){returnget(current--);}publicvoidremove(){thrownewUnsupportedOperationException();}};}};}}publicclassAdapterMethodiom{publicstaticvoidmain(String[]args){ReversibleArrayList<String>ral=newReversibleArrayList<String>(Arrays.asList("To be or not to be".split(" ")));for(Strings:ral){System.out.print(s+" ");}System.out.println();for(Strings:ral.reversed()){System.out.print(s+" ");}}}/*To be or not to bebe to not or be To */
publicclassMultiIterableClassextendsIterableClass{publicIterable<String>reversed(){returnnewIterable<String>(){publicIterator<String>iterator(){returnnewIterator<String>(){intcurrent=words.length-1;publicbooleanhasNext(){returncurrent>-1;}publicStringnext(){returnwords[current--];}publicvoidremove(){thrownewUnsupportedOperationException();}};}};}publicIterable<String>randomized(){returnnewIterable<String>(){publicIterator<String>iterator(){List<String>shuffled=newArrayList<String>(Arrays.asList(words));Collections.shuffle(shuffled,newRandom(47));returnshuffled.iterator();}};}publicstaticvoidmain(String[]args){MultiIterableClassmic=newMultiIterableClass();for(Strings:mic.reversed()){System.out.print(s+" ");}System.out.println();for(Strings:mic.randomized()){System.out.print(s+" ");}System.out.println();for(Strings:mic){System.out.print(s+" ");}}}/*banana-shaped. be to Earth the know we how is that And is banana-shaped. Earth that how the be And we know to And that is how we know the Earth to be banana-shaped. */