黑马程序员 学习毕老师java视频第14.15.16天

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

毕向东 Java基础视频教程14天01 集合框架(体系概述)

1.  数组虽然可以存储对象,但是数组长度是固定的,而且只能存储同一类型的对象。

2.  出现各种各样容器的原因:没一个容器对数据的存储方式不同,这种存储方式被称为数据结构:数据在内存中的存储方式不同。

 

毕向东 Java基础视频教程14天02 集合框架—共性方法

1.  接口是不需要构造函数的,因为不需要创建对象,也就不需要初始化了。

2.  当参数类型是object类型时,可以往里面传入任意对象,因为参数类型是object类型,那就可以往里面传入object对象和所有子类对象,也即任意对象。

3.  cls命令将dos命令行中cls所在行置顶,并清除其他所有行。

4.  当我们想运行一个class文件时,该class文件又不在当前目录下,我们又不想在dos命令行切换到class文件所在目录,就可以set classpath=class文件所在的路径,如果该class文件有pack文件夹的话,就只写pack的路径

5.  运行包下的class文件:

1.  类属于包,类文件放在包文件夹中管理。

2.  pack.PackageDemo对于前面的pack要么当做包文件夹,要么当做包,根据情况怎么方便怎么读

3.  两个不同的包中,子类继承父类,若父类是pulic但是父类的方法是默认权限,子类依然无法访问,除非是public或者protected.

4.   protected的权限大于默认权限

5.  问题:类名加了共有以后,类名和java文件名必须一致,所以一个java文件中不能出现两个pulic类或接口。

6.   import导入的是包中的类,import要写在package的下面

7.   为了避免类名重名,所以起了包名,所以要避免包名重名626

8.   ArrayList子类中的add()方法的参数类型为object,这样就可以接受各种类型对象,因为所有子类对象属于父类类型。

9.   集合中存放的不是对象,而是对象地址或引用。

10.           打印集合可以直接输出对象,不会输出哈希值,而是所有对象

11.           两个集合容器al1和al2,al1retainAll(al2) 那么al1中仅保留和al2相同的部分。和removeAll刚好相反,去掉相同的部分

 

 

 

毕向东 Java基础视频教程14天03 集合框架(迭代器)

1.  问题:al是一个集合,al.iterator()返回的为什么是iterator接口的子类对象。

2.  父类引用指向子类对象,接口引用指向子类对象。

3.  al.iterator()得到的就是集合al的迭代器,迭代器就是用来获取元素的

4.  因为每个集合取出其中元素的操作不止一步(不是一个方法就能实现),而且不同集合的取出方式也不一样,

5.  所以我们把取出这个动作,定义成类(就可以有多个方法),封装成对象,并且根据每个集合的不同创建属于自己的内部类(定义在内部更方便对该集合内元素的取出)。那么怎么获取取出对象(迭代器),就通过该集合的iterator()方法返回该集合的迭代器。对于各种各样的取出对象(迭代器),都有判断和取出动作,所以抽象出一个接口interface Iterator

6.  Iterator it=al.iterator();之所以申明为Iterator类型,而不是子类类型,是因为不知道子类类名是什么。

 

 

毕向东 Java基础视频教程14天04集合框架(List集合共性方法)

1.  List集合内的元素是有序的,是可以重复的,而Set内的元素是无序的,是不可以重复的。

2.  凡是可以操作角标的方法都是List体系的方法。

3.  List子类对象的全部输出,既可以用for循环+get()方法,也可以用通用的迭代器方法iterator()

 

 

毕向东 Java基础视频教程14天05 集合框架(ListIterator())

1.  可以把子类对象赋给/传给父类对象=子类对象属于父类类型。当需要把一个对象传给另一个对象,可是又不知道该对象是什么类型的时候,可以根据把子类对象传给父类对象,找出所有可能的子类对象的一个父类对象,那就是万能的object对象。这样一来不管对象是什么类型,都满足把子类对象传给父类对象。

2.  问题:并发修改异常:就是迭代器正在输出的时候,你又往集合里传入新的对象,可是迭代器里只有原有元素的引用,这样到底取不取新元素就不确定,迭代器正在输出的时候,你有在集合中删除一个元素(的引用),迭代器中还含有该元素的引用,那么到底去还是不取就不确定了,我们把这叫做并发修改异常。一句话:迭代器和集合不能同时操作对象。

3.  迭代器中的remove去掉的是集合中的元素的引用,也就是把集合中的元素去掉了。迭代器的操作都是对集合中元素的操作。

4.  问题:迭代器调用remove方法删掉了集合中对象的引用,那么迭代器中的对象引用有没有删除啊。

5.  ListIterator接口是Iterator接口的子接口,出现该接口是因为Iterator接口在出现并发修改异常时,不能往集合里添加元素,修改元素,所以创建了一个子接口ListIterator,该接口的子类对象(属于List集合的迭代器)通过通过集合调用listIterator()方法获得

6.  hasNext为false时,指针还是会往后跳一个,指向空。

 

 

 

毕向东 Java基础视频教程14天06 (List集合)

1.  用迭代器对对象进行操作的时候就不能再用集合对对象进行操作。迭代器就是对集合进行的操作。

2.  List的几个子类对象,

ArrayList:底层数据结构是数组数据结构,便于查询,但增删稍慢,线程不同步,效率高

LinkedList:底层数据结构为链表数据结构,增删速度快,但不便于查询

Vector:底层数据结构为数组数据结构。线程同步,JDK 1.0 被ArrayList取代。

 

 

 

毕向东 Java基础视频教程14天07 集合框架(Vector中的枚举)

1.  枚举接口(Enumeration)可看做迭代接口,也是把子类对象赋给父类接口,子类对象通过elements()方法获得,可把子类对象当做迭代器看待。枚举名字长,并且方法的名字也长,被Iterator接口取代。所以Vector集合中的对象有四种取出方法:迭代器,ListIterator,get,枚举

 

 

毕向东 Java基础视频教程14天08 集合框架-LinkedList

1.  removeFirst removeLast()方法获取并删除

2.  LinkList可以用removeFirst和removeLast()结果isEmpty()方法,顺序和倒序输出集合所有元素。

3.  从1.6版本开始removeFirst被pollFirst()取代,当集合中为空时,调用removeFirst()抛出没有这样元素异常,而pollFirst()不抛出异常,返回null

4.  从JDK1.6开始 get First/Last 被peekFirst/Last代替,增加offerFirst/Last插入

5.  和first/last有关的都是LinkedList的方法。

 

 

 

毕向东 Java基础视频教程14天09 集合框架(LinkedList练习)

1.  使用LinkedList模拟一个堆栈或者队列数据结构,堆栈:先进后出,队列:先进先出。

实质:借助于LinkedList集合容器及成员方法,建立一个队列类的对象(假容器),借助队列类的属性和构造函数,每创建一个队列对象就对应创建一个LinkedList对象,然后借用其方法,提供属于队列的方法名。简言之:队列类内部,先声明LinkedList对象,然后构造函数内创建对象。

 

 

毕向东 Java基础视频教程14天10集合框架(ArrayList练习)

1.  Object obj 这里的Obj就理解为一个对象,一个Object类的对象,obj就是这个对象的名字,不要理解为类型,这样理解速度就慢了,参数也这么理解,不要从参数类型的角度的理解,就是参数是什么,你就传递什么就是了。

2.  子类对象属于父类对象。

3.  =赋值运算只要满足两个条件任意一个就行:

a.      同种事物赋给同种事物

b.      子类对象赋给/传给父类对象/父类接口

c.      取出已知ArrayList里的重复元素,需要在创建一个ArrayList。

4.。next()判断一次取出一次,去多了容易出现NoSuchElementException

 

 

毕向东 Java基础视频教程14天 11 集合框架(ArrayList练习2)

1.  对于向上转型的东西,咱们就将错就错,把你当做什么,只要自己知道它是由什么向上转型的就好。

2.  Object的equals()方法,是两个对象之间的比较,比较的是对象的地址值。

3.  看一个集合里是否包含某对象,调用contains(Object obj)时,obj会自动调用传入的对象的equals方法,然后和集合里的已有每个元素之间进行比较,equals返回true,则返回给contains()方法true,也就是说该元素和集合里的某个元素相等,那么该集合就包含该元素。要注意,元素和元素(对象和对象)是否相等,是有对象的equals方法来定了,这个类的equals方法是可以程序员自己设定的来比较两个对象是否相等。

4.  ArrayList和LinkedList的contains和remove()方法底层都是调用的equals方法,默认equals方法是比较两个对象的地址值,如果对象的equals方法有被复写,那么就调用自定义的equals对两个该类对象进行比较,然后返回true,false,比进行remove操作。

 

 

毕向东 Java基础视频教程14天-12 集合框架(HashSet)

1.  int型和进制没有关系,只要是在四个字节的二进制的取值范围内,并且是整数,都可以存成int型,与数字是十进制,十六进制无关。

2.  HashSet底层数据结构是哈希表,当一个对象和已有对象地址值不一样时,存入,当一个对象和已存入的一个对象的地址值相同时,看对象是否相同,对象不相同的话,就将该对象在该地址下顺延。

3.  HashSet调用add(),如果集合里面没有这个元素,那么返回true,如果有,则返回false,这个和调用equals不一样。调用add()时,先看该对象的地址值,和已有对象的地址值是否相等,相等再看对象是否相等。

 

 

毕向东 Java基础视频教程14天13 集合框架(HashSet存储自定义对象)

1.  HashSet()保证元素唯一性的两个依据:hashcode()和equals()

2.  一般把对象存入集合中时,一般都会复写这个对象的hashCode()和equals()

 

 

 

 

 毕向东 Java基础视频教程14天-14 集合框架(HashSet判断和删除的依据)

1.  ArrayList判断元素是否存和删除依赖的是equals犯法,而HashSet判断元素是否存在和删除元素依赖的是HashCode()和equals()

 

 

 

 

 

 

毕向东 Java基础视频教程15天 01 集合框架(TreeSet)

1.  因为不确定子类对象所以多态

2.  TreeSet 对集合中的元素进行排序,按照ASCII码的自然顺序。

 

 

 

毕向东 Java基础视频教程15天02 集合框架(TreeSet存储自定义对象)

1.  任何类只要实现了Comparable接口,java就认为该类对象具有了可比较性,然后根据复写的compareTo ()方法进行比较

2.  往TreeSet里面存东西时,会自动调用复写的compareTo()方法,如果返回值为0,则认为是相同对象,之存入先存入的那个。

3.  字符串已经复写了compareTo()方法,直接调用,可对两个字符串进行比较。

4.  排序时当主要条件相同时,一定要判断下次要条件。

 

 

 

毕向东 Java基础视频教程15天03 集合框架(二叉树)

1.  返回值为负数(比谁小)就往左边走,返回值为整数(比谁大)比谁大就往右边走,返回值是决定因素,对象的值比谁小,比谁大不是决定因素,一切由返回值来确定谁是小的放在左边。

2.  二叉树可以减少元素的比较次数。

3.  二叉树结构中,如果比较的元素过多时,会自动寻找一个折中值,从这个折中值开始进行比较

4.  TreeSet底层数据结构是二叉树,保证元素唯一性的就是compareTo()返回值为0,认为是同一元素,拒之门外。

5.  TreeSet排序的第一种方式:让对象本身具有可比较性,实现Comparable,复写compareTo(),这种方式也叫做自然顺序,默认顺序。

 

 

毕向东 Java基础视频教程15天04 集合框架(实现Comparator方式排序)

1.  TreeSet集合的第二种比较方式,当元素本身不具备比较性时,或者具备的比较性不是我们需要的,这时就要让集合本身具有比较性。在集合初始化时就具有了比较方式。需要自己定义一个比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。

2.  如果是年龄进行进一步的比较,可以把年龄作为参数通过Integer封装成对象,然后调用compareTo()方法,

3.  当两种比较方式都存在时,以比较器为主。

4.  定义比较器,实现Comparator,复写compare()方法。

5.  接口实现功能扩展:类实现Comparable,那么对象具有可比较性,集合实现Comparator,那么集合就具有了比较器。

 

 

 

 

 

毕向东 Java基础视频教程15-05 集合框架(TreeSet练习)

1.  比较器比自然顺序用得广,因为比如,字符串本身实现了Comparable,但是它复写的compareTo()方法只能按照自然顺序比较,因为字符串这个类是java自己定义的,我们无法去修改compareTo()方法,只能接受自然顺序的排序方法。但这个不是我们想要的,而可以把比较器安装在TreeSet集合里,我们自己去定义这个比较器,定义比较的方法。

2.  区别数组的length和字符串的length()方法。

3.  数字的比较有两种方式,一种是直接相减,然后返回差,另一种是通过Integer封装成对象调用compareTo()方法。

4.  匿名内部类实际上就是接口或者父类的子类对象,只不过这个子类它没有名字,借用了一下接口的名字去建立对象而已。建立比较器(不想起名字)作为集合的参数传递时就可以通过匿名内部类的方法。

 

 

 

毕向东 Java基础视频教程15-06 集合框架(泛型概述)

1.  JDK1.5开始在创建集合时就先确定存入元素的类型,将运行时期的ClassCastException,提前到了编译时期,减少了运行时期出现的问题。

2.  泛型:JDK1.5开始出现的新特性,是一种安全机制,集合和迭代器都规定了其中元素的类型,调高了程序的安全性。也避免了强转的麻烦。

3.  基本数据类型习惯于用类型去修饰,但是对象再用类型去修饰就属于废话了,为了简介包括String在内的对象习惯直接就说对象不说类型。

 

 

 

毕向东 Java基础视频教程13天07集合框架(泛型使用)

 1.<>就是用来定义集合中元素的类型的。

2.对于字符串,我们认为可以将字符串对象直接打印出来。

3.<>里面也理解为对象,()里面当时基本类型时理解为参数类型,类类型时直接理解为对象更简单(自己的快速理解方式)。你非要都说是参数类型也可以(语法表达方式),只不过当时类类型时直接理解为对象更简单。复写的标准统一说是参数类型要一样,具体分析时还是分基本数据类型和对象

4.参数向下转型时一般要先判断参数是不是某子类对象,不然可能转型已成。

5.自定义一个对象时,因为不确定到底要存入HashSet还是TreeSet集合,所以自定义对象时就要在里面复写hashCode()和equals()方法和实现Comparable接口复写compareTo()方法。

6.泛型可以用于集合,迭代器,Comparable(用于对象)和Comparator接口(用于自定义比较器)

 

 

 

毕向东 Java基础视频教程15天08集合框架(泛型类)

1.  当类中申明了一个对象时,就把对象当做是类的一个属性,也即把Worker作为一个属性。

2.  一个工具类的对象类型是QQ,那么该工具类操作的对象就是QQ

3.  在创建工具类时就要设置好对象类型。

4.   既要理解语法表达方式,也要有自己的快速理解方式。

5.  当类中操作的对象(引用数据类型)不确定时,早起使用Object来完成扩展,现在使用泛型来完成扩展。

 

 

 

毕向东 Java基础视频教程15天09 集合框架(泛型方法)

1.  如果将泛型定义在类上,那么该类的所有方法都被的泛型就都被确定为该类型了。

2.  把泛型定义在方法上,那么方法的参数T,Q就可以接受多重类型对象。

 

 

 

毕向东 Java基础视频教程15天10 集合框架(静态方法泛型)

1.  泛型类上定义了泛型<T>,泛型方法上就不能在定义<T>,因为这样一来就不知道方法参数里的<T>是类的泛型还是方法的泛型。

2.  静态方法不能访问类上定义的泛型,因为静态方法被加载时,还没有建立对象,也就没法确定类的泛型,这样虚拟机就不知道静态方法访问的是什么泛型,编译失败。而把泛型定义在静态方法上就可以,因为方法的泛型是不需要先确定的,编译时就可以通过了。并且该泛型可以接受任何类型的对象。

3.  泛型放在方法上需要放在返回值类型的前面,修饰符的后面。

 

 

毕向东 Java基础视频教程15天11集合框架(泛型接口)

1.  当我们不知道方法的参数是什么时,就可以借助泛型。当所有方法的参数一样时,就可以把泛型定义在类上,如果不一样,就可以把泛型定义在方法上,这样泛型就可以接受任何对象。

2.  接口的泛型可以在实现接口的时候确定的,也可以传递给实现它的子类(也即在实现接口的时候不能确定接口的泛型),然后在建立接口的子类对象时通过确定子类泛型来确定接口的泛型。

 

 

 

毕向东 Java基础视频教程15天12集合框架(泛型限定)

1.  类,方法和接口的泛型说穿了就是方法的参数,而集合和迭代器的泛型是集合里的对象。

2.  在打印集合时,因为集合的对象是多样的,那么在确定参数的时候我们就可以把集合写成带有通配符的集合,如ArrayList<?>,这样不管是包含什么样对象的ArrayList都可以传递进来了。

3.  (ArrayList<T>,al)当参数里面ArrayList后面的泛型是T的时候,需要现在方法中定义<T>才能使用,T是可以接受任何对象的,也就是说这个参数可以接受含有任意某一类对象的集合。和ArrayList<?>相比,T可以T t=it.next(); 然后用t去做事简化书写。

4.  定义子类构造函数时,可以借用父类构造函数,但是要注意父类构造函数的参数类型。

5.  ArrayList<Person> al=newArrayList<Student> ();Student是Person的子类,这样是不行的,因为本类申明的是装含有Person对象的集合,结果里面只能含有Student对象了。所以记住结论,集合对象是Person时就只能传递对象为Person的集合。

6.  泛型限定:ArrayList<? extends Person>这样即可以接受含有Person的集合,也可以接收含有Person子类对象的集合。

7.  泛型下限:<?super Student> 可以接受Student和Student的父类对象。

8.  在定义一个集合的比较器时,implements Comparator<可以是集合的对象也可以是集合对象的父类对象>,这样就决定了我们自定义的比较器比较的也是集合的对象或者集合对象的父类对象。TreeSet有个构造函数为TreeSet(Comparator <? super E>, comparator) 参数是一个比较器接口,并且比较的是E(TreeSet集合里的对象)或者其父类对象。根据子类对象传给父类接口,并且自定义比较器比较的对象是由实现的Comparator的泛型决定的,所以implements Comparator<>时,<>里面可以是比较集合的对象或者集合里对象的父类对象。这样定义比较器的好处就是,对于两个集合如:

TreeSet<Student> al=new TreeSet<Student>(newMyCompare())

TreeSet<Person> al1=new TreeSet<Person>(newMyCompare())

Class MyCompare implements Comparator<Person>………………….自定义比较器

{

   public intcompare(Person p1, Person p2)

}

(其中 Student extends Person) 只需要定义一个比较器。

对于第一个集合初始化时,参数部分满足子类对象传给父类接口,并且满足比较的是Student(E)的父类对象,运行时也可以把两个Student,传给两个Person进行比较,Student要比较的name属性,Person也有。对于第二个集合,满足比较的是TreeSet集合里的对象Person(E),运行时把两个Person传给了两个Person,也完全没问题。

总结:在定义一个集合的比较器时,如果把Comparator<>的泛型定义为该集合对象的父类对象,那么对于一个以该集合对象的父类对象为元素的集合,既不需要重新定义比较器了。

 

 

 

 

 

毕向东 Java基础视频教程15天13集合框架(泛型限定2)

1.  对于两个TreeSet集合,里面的对象分别是A和B,并且A和B都extends C,那么对两个集合只需要定义一个比较器,只需要在Comparator<>的泛型里输入C就行了,就免去了建立一个TreeSet对象,就定义一个比较器的麻烦。

 

 

 

 

毕向东 Java基础视频教程16天01集合(Map概述)

1.  Map集合:该集合存储键值对,一对一对往里存。要保证键的唯一性。

2.  子类:Hashtable   HashMap  TreeMap

3.  Map调用remove()时,如果没有这个元素,那么返回null, 如果有这个Key, 那么返回的就是Value

4.  Map在输出的时候直接System.out.println(map);

5.  HashMap集合,null是可以作为一个键存在的。

6.  每一个对象都有属于自己的HashCode,而这个HashCode()定义在这个对象的类中。

 

 

 

毕向东 Java基础视频教程16天02集合(Map概述)

1.  Hashtable底层数据结构是哈希表,不能存入空键空值,该集合线程是同步的。

2.  HashMap底层也是哈希表数据结构,并允许使用空键空值。该集合是不同步的。

3.  TreeMap底层是二叉树数据结构,不同步,可一个Map集合中的键进行排序。

4.  Map和Set很像,Set底层就是使用了Map集合。

 

 

 

毕向东 Java基础视频教程16天03集合(Map共性方法)

1.  HashMap的values(),value值是怎么存入HashMap的,values()方法得出的Collection里的values的排序就是怎么排序的。

2.  集合和Map中的元素都可以直接输出的。

3.  调用一个方法会返回某个东西,但是如果不打印出来是不会显示的,因为要显示在屏幕上就必须用SOP

4.  Map的put()方法,如果映射中还没有我们要存入的键,那么返回null,如果映射中已经有了我们要存入的键,那么新的值就会覆盖旧的值,并且返回被覆盖的值。

 

 

 

毕向东 Java基础视频教程16天04集合(Map-keySet)

1.  Map的keySet()方法,得到的是所有键的Set集合。

2.  String key,对于String 如果后面的名字有意义以名字为主,前面只是它的数据类型,如果名字没有意义,就把String当做字符串理解。

3.  输入Map里的键值队的方法:

a.      Map的keySet()方法得到键的Set集合

b.      通过Set集合的Iterator获得每个key

c.      Map映射调用get()方法获取每个key的对应值

 

 

1.  毕向东 Java基础视频教程16天05集合(Map-entrySet)

2.  Map集合的第一种取出方式的去除原理:把Map集合转成Set集合。

3.  Map.Entry是一个接口,Map去调用entrySet()方法得到的就是映射关系的子类对象,就可以使用Map.Entry的getKey(),getValue()方法。

4.  接口内部可以有内部接口,内部类可以实现内部接口。

5.  Map.Entry比较特殊,为方便理解:Map.Entry<String,String> 该把他当做对象时就当做对象,当做接口时就当做接口。

 

毕向东 Java基础视频教程16天06集合(Map练习)

1.  ClassCastException是RuntimeException的子类。

2.  String的equals()方法和compareTo()区别:equals方法返回值是boolean,compareTo()方法返回值类型是int,按照自然顺序,A.compareTo(B), 如果A在前面返回值为负数,也即返回值为负数则说明A在前面。equals()方法是对两个字符串的内容进行比较。

3.  直接输出一个对象时,会自动去调用toString()方法,类名@hashcode.

 

 

毕向东 Java基础视频教程16天07集合(TreeMap练习)

1.  getKey和getValue()方法属于Map.Entry接口,而Map.Entry的子类对象指的仅仅是一个键值队。entrySet指的是映射关系的集合,包含了多个键值队,不能直接调用getKey()和getValue()方法,必须通过迭代器把一个个键值队输出,然后再掉用。

2.  当我们想把对象有序的存入到Map中的键的位置时,就要把对象存入到TreeMap中,不能存入到HashMap中去。虽然HashMap会把对象按照hashCode顺序去存入,但是按照哈希值排列的顺序对我们来说他就是无序的。

3.  当对象implements Comparable时,对象具有了自己的比较的方法,但如果这个比较的方法不是我们想要的时候,我们一般又不能去更改这个对象的类的定义,那么就去定义一个比较器implements Comparator.

4.  创建TreeMap对象时,也可以传入一个比较器。注意:只有TreeSet和TreeMap才需要比较器。其他的集合都不能传入比较器。ArrayList是输入是什么顺序,一般输出就是什么顺序。HashSet和HashMap以哈希值为主。

 

 

毕向东 Java基础视频教程16天08集合(TreeMap练习—字母出现的次数)

1.  当数据之间存在着映射关系(对应关系)时,就可以使用Map集合。

2.  集合后面的泛型里只能装入对象,不能装入数据类型。String很特殊,它即可以作为数据类型,也可被作为对象,而char,int只能作为数据类型,所以泛型里不能装入char,int.

3.  对于一个类,一般当这个对象的名字的含义不重要时,我们就把它当做一个对象,当这个对象的名字的含义重要时我们就把它当做一个类类型,这样做是为了理解更加快捷。如String str和String name 前面的String当做对象来看,后面的String当做一个name的类类型看待。灵活变通,怎么理解简便就怎么理解,达到炉火纯青地步。

4.  就像“abcde”是String的对象一样,‘a’也是Character的对象。

5.  key,value是什么类型就直接看Map<>的泛型是什么。

6.  String,Character,Integer这些对象都属于可以直接打印出来的对象。

7.  当调用一个方法返回的是个对象的时候,都可以return null,因为返回对象其实返回的就是对象引用,即地址值,null作为空地址值也是个地址值符合语法规范。这样做往往是为了编译通过。

8.  字符串容器里面装的是可以增删改查的字符串,但是它本身是一个容器,不是个字符串,虽然输出容器时输出的确实是里面的字符串,但是从语法上来讲我们输出还是一个容器。所以一般调用toString()方法把容器转换成字符串。

9.  变量尽量不要定义在循环里面,因为定义在循环里面,每一次循环都会开辟一次空间,释放一次空间,这样循环有多少次,开辟和释放就定义了多少次,影响运行效率。

10.           Character自身实现了Comparable接口,存入集合时默认按照自然顺序排序。

 

 

 

毕向东 Java基础视频教程16天09集合(Map扩展)

1.  Map集合中装Key,value都是对象,而Map集合也可以作为对象传入到另一个大Map集合中。也就是Map集合中还装着Map集合。

2.  先建空学校,再建空教室,然后把空教室放入到学校中,然后往空教室中放入学生。

3.  String name, Character chr统一理解:有一个String名叫name,有一个Character 名叫chr,(只要是类就不要管他什么类型不类型的)当名字很有意义时我们很容易就过渡到name,当名字意义不明显时,我们就通过Character来帮助理解chr,chr是个Chracter.这样正反理解都是完全acceptable的。而不要去管这名字有意义没意义,管他有意义没意义哥都能理解。

4.  集合的泛型里既可以是对象,也可以是接口。当集合的泛型是接口时,里面存的对象就是接口的子类对象。但是在往集合里传的时候要传名义上的接口(泛型必须一一对应),这就要用到子类对象传给父类接口,然后把名义上的父类接口实际上的子类对象传进去

5.  要输入一个学校的一个班的学生的信息,首先,学校。keySet()然后遍历得到所有的班级,调用Map的get(KEY)方法得到一个班级实体,的然后把每个班级实体作为一个参数传递给一个自定义方法,然后把该集合再遍历一个个输出就是我们想得到的信息。

 



---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net/heima" target="blank">http://edu.csdn.net/heima</a>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值