JAVA第二周学习周记:内部类及集合框架

 4.6-4.12一周总结
一眨眼,又一个星期从身边跨过去了。过去的一周里面,应该说快乐和悲伤并存,很多时候被弄的很沮丧,很多时候又很兴奋。反正不管怎么样,既然已经决定了要走软件编程这条路,我就应该义无反顾,放下所有的包袱,认真努力的学一回。
今天,虽然没有去学习,去了艺术展览馆,但不觉得浪费了。生活中,很多东西都是相通的,偶尔去外面换换心情,那只是为了更好的去学习。就像今天去看艺术展览,虽然很多东西都看不懂,但是增长了见识。感觉生活是多么的美好,生活中看似平凡的东西,艺术家的眼光就会变得很美好,所以认真的感知生活,那么自己就会变得很快乐。
不过这一周,还是有很多不尽如人意的地方,比方说,自己订的誓言,实行了几天,一碰到困难就变卦了。还有学习上,一碰上困难,总是不想着怎么解决,而总是等着别人。这种学习态度是很悲观的,学习是快乐的事情,碰上困难了,应该高兴,说明自己又找到问题了,又有进步的空间了。所以,学习上,态度很重要。
总结下上个星期的知识点吧:
1.枚举(实际上就是个普通类)用enum表示。
以前的方法:
1. 用数字来代表那个属性,那个东西。 public static final int SPRING=0;
主要是当所调用的这个数字超过了这个数字时,就会造成数据的不安全。
2. 5.0以前的版本枚举   public staticfinal Season SPRING=new Season(”hello”);
并且将方法定义为私有。Private Season(){};而且不能用在switch结构中。
 3.  5.0以后的枚举 定义一个enum类 SPRING(”hello”);并且可以用在switch结构中,可以用switch(this){case SPRING:return "春季";}如果要得到定义中的枚举常量时候,可以用Season[] s=Season.Values();    for(int i=0;i
2.内部类(静态内部类,成员内部类,局部内部类,匿名内部类)
1.静态内部类:就相当于此类的静态属性,想要访问,不需要对象,只要类名。属性就好了。所以静态内部类只能访问外部类的静态属性。(跟外部类的关系相当于是寄居,所致在生成内部类对象的对象时不需要有外部类对象)
调用方法:OuterA.InnerA  inn=new OuterA.InnerA();     inn.m1();
2.成员内部类:相当于类里边的实例属性或实例方法。与外部类的关系相当于是寄生,就是在生成内部类对象时必须要有外部类对象,。
调用方法:OuterA out=new Outer();
  OuterA.InnerB innb=out.new InnerB();     innb.m2();
3.局部内部类:在外部类的方法里边所定义的类。可以访问外部方法的final变量(相当于将那个常量拍个照,然后返回),也可以在里边直接调用外部类方法。
调用方法:先定义一个接口interface MyInter{public void innerm();}
public MyInter m1(){
final int a=10;
class InnerC implements MyInter{        //内部类中实现这个接口
public void innerm(){ //实现接口的方法
System.out.println("InnerC Innerm()!");
System.out.println(a);
}
}

return new InnerC(); //
}
主方法里边的调用OuterB out=new OuterB();   
         MyInter obj=out.m1();
         obj.innerm();
 4.匿名内部类:是一种特殊的局部内部类,它的语法比局部内部类灵活。
先定义一个接口interface MyInter{public void innerm();}
public MyInter m2(){
return new MyInter(){           //定义了一个MyInter的无名实现类,并实现方法
public void innerm(){
}
};
}
在内部类中访问外部类的方法:外部类名。this。方法
3.集合框架collection(List有序列表Set无序集合Queue队列) Map映射
1.List 元素有序存放,允许重复,实现类有ArrayList(线程不安全)及Vector(线程安全)和LinkedList(实现了List和Queue接口)。
数组:访问效率高,但是插入,删除麻烦。
链表:访问效率低,但是插入,删除简单。
(迭代器:Iterator it=list.iterator();  Iterable接口里边的iterator方法返回的是一个Iterator类型,所以可以调用Iterator里边的方法。While(it.hasNext()){syso:(it.next());
所有Iterator接口的实现类对象和所有的数组又都可以用for each方法:
for(Object obj:list){obj};)
2.Set 不允许重复,实现类HashSet。在实现Set.add(obj)时,先要求出这个对象的obj.hashCode();但是Object里边的方法返回的都是在内存中的地址,所以要覆盖toString方法。然后根据哈希运算求得下表位置,所以要覆盖hashCode()方法,如果判断了改下标上有对象的话,再调用equals方法,所以要覆盖Object里边的equals方法。
还有个子接口SortedSet(排好序的集合)实现类TreeSet。因为是排好序的集合,那当然要有个排序的方式。有两种方法:1.实现Comparable接口,覆盖compareTo方法,一个类实现了Comparable接口这个类就有了自然顺序。2.定义一个内部类实现Comparator接口,实现compare方法。Public comparator=new 外部类。内部类构造器();
3.Map 实现类HashMap(线程不安全)及HashTable(线程安全) (Set本质上就是一个Map,只是它右边的值没有了,就有一些键,所以Map的例子可以参照Set)
子接口SortedMap实现类TreeMap
Set set=map.keySet();
Iterator it=set.iterator();
While(it.hasNext()){
Object obj=it.next();
System.out.println(obj+”:”+map.get(obj));}



上个星期总体上,学的东西还是能够掌握的,也只是用的不多,所以知识点也还是有点没串起来。也就是说,整体上,最困难的入门阶段我已经度过去了,所以一切都不要太悲观了,每天都抱着快乐的态度去学习。把学习当成是一种乐趣,每当掌握一个知识点,都兴奋的要命。Juxy,trust yourself,you will do best。

你可能感兴趣的:(JAVA)