黑马程序员_JAVA学习笔记5
2014-02-18 17:11
281 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
关于MAP中 HashMap中的 keyset 和 values方法 的返加值不同:因为 键是不能相同的所以用 SET作返回类型,而值是可以相同 的用 Collections作返回类型。
HashSet底层是使用HashMap实现的。当使用add方法将对象添加到Set当中时,实际上是将该 对象作为底层所维护的Map 对象的key,而 value 则都是同一个Object对象。
HashMap底层维护一个数组,我们向HashMap中所放置的对象实际上是存储在数组当中;
当向HashMap中put一对键值时,它会根据key的hashCode计算出一个位置,该位置就是此对象准备往数组中存放的位置。如果该位置没有对象存在,就将此对象直接放进数组当中,如果该 位置已经有对象存在了,则顺着此存在的对象的链开始寻找(Entry类有一个Entry类型的next成员变量,指向了该对象的下一个对象),如果此链上有对象的话,再去使用equals方法 进行比较,如果对此链上的某个对象的equals方法比较为false,则将该对象放到数组中,然后将数组中该位置以前存在的那个对象链接到此对象的后面。
范型:
public class GenericFoo<T>
{
private T foo;
public T getFoo()
{
return foo;
}
public void setFoo(T foo)
{
this.foo = foo;
}
public static void main(String args)
{
GenericFoo<Boolean> foo1 = new GenericFoo<Boolean>();
GenericFoo<Boolean> foo2 = new GenericFoo<Boolean>();
}
}
上面是一个范型的小例子。减少了类型转换错误。所谓范型:就是变量类型的参数化。
范型限制:public class ListGenericFoo<T extends List>
不写extends 默认的是 继承Object类型的。使用super只能实现List上面类型的,不能使用其下面类型的。
使用<?>或是<?extends SomeClass>的声明方式,意味著您只能通过该名称来取得所参考实例的信息,或者是移除某些信息,但不能增加它的信息,因为 只知道当中放置的是SomeClass的子类,但不能确定的是什么类的实例,编译器不让您加入信息,理由是,如果可以加入信息的话,那么您就得记得取回的实例是什么类型,然后转换为原来的类型方可进行操作,这就失去了使用泛型的意义。
GenericTest<? extends List> ge = null;
ge = new GenericTest<ArrayList>();
ge = new GenericTest<LinkedList>();
上面可以使用? 通配符,可以指向List 类型的对象。
For-Each 循环的加入简化了集合的遍历其语法如下:
for(type element : array)
{
System.out.println(element)....
}
如下面的程序:
int[][] arr2 = {{1,2,3},{4,5,6},{7,8,9}};
for(int[] row : arr2)
{
for(int element : row)
{
System.out.println(element);
}
}
Integer 类有一个缓存,它会缓存介于-128 – 127之间的整数。
可变参数 type… 变量名,必须放在最的一个。(本质是一个数组)
枚举:我们所定义的每个枚举类型都继承自java.lang.Enum类,枚举中的每个成员默认都是public static final的。
而每个枚举的成员其实就是您定义的枚举类型的一个实例。
下面是一个简单的EnumSet:
enum FontConstant
{
Plain,Bold,Italilc,Hello
}
public class EnumSetDemo
{
public static void main(String[] args)
{
EnumSet<FontConstant> enumSet = EnumSet.of(FontConstant.Plain,FontConstant.Bold);
showEnumSet(enumSet);
showEnumSet(EnumSet.complementOf(enumSet));
}
public static void showEnumSet(EnumSet enumSet)
{
for(Iterator<E> iter = enumSet.iterator();iter.hasNext())
{
System.out.println(iter.next());
}
}
}
Import static 静态导入,要一直导入到类中的 静态成员变量和方法 这个层次上。
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
关于MAP中 HashMap中的 keyset 和 values方法 的返加值不同:因为 键是不能相同的所以用 SET作返回类型,而值是可以相同 的用 Collections作返回类型。
HashSet底层是使用HashMap实现的。当使用add方法将对象添加到Set当中时,实际上是将该 对象作为底层所维护的Map 对象的key,而 value 则都是同一个Object对象。
HashMap底层维护一个数组,我们向HashMap中所放置的对象实际上是存储在数组当中;
当向HashMap中put一对键值时,它会根据key的hashCode计算出一个位置,该位置就是此对象准备往数组中存放的位置。如果该位置没有对象存在,就将此对象直接放进数组当中,如果该 位置已经有对象存在了,则顺着此存在的对象的链开始寻找(Entry类有一个Entry类型的next成员变量,指向了该对象的下一个对象),如果此链上有对象的话,再去使用equals方法 进行比较,如果对此链上的某个对象的equals方法比较为false,则将该对象放到数组中,然后将数组中该位置以前存在的那个对象链接到此对象的后面。
范型:
public class GenericFoo<T>
{
private T foo;
public T getFoo()
{
return foo;
}
public void setFoo(T foo)
{
this.foo = foo;
}
public static void main(String args)
{
GenericFoo<Boolean> foo1 = new GenericFoo<Boolean>();
GenericFoo<Boolean> foo2 = new GenericFoo<Boolean>();
}
}
上面是一个范型的小例子。减少了类型转换错误。所谓范型:就是变量类型的参数化。
范型限制:public class ListGenericFoo<T extends List>
不写extends 默认的是 继承Object类型的。使用super只能实现List上面类型的,不能使用其下面类型的。
使用<?>或是<?extends SomeClass>的声明方式,意味著您只能通过该名称来取得所参考实例的信息,或者是移除某些信息,但不能增加它的信息,因为 只知道当中放置的是SomeClass的子类,但不能确定的是什么类的实例,编译器不让您加入信息,理由是,如果可以加入信息的话,那么您就得记得取回的实例是什么类型,然后转换为原来的类型方可进行操作,这就失去了使用泛型的意义。
GenericTest<? extends List> ge = null;
ge = new GenericTest<ArrayList>();
ge = new GenericTest<LinkedList>();
上面可以使用? 通配符,可以指向List 类型的对象。
For-Each 循环的加入简化了集合的遍历其语法如下:
for(type element : array)
{
System.out.println(element)....
}
如下面的程序:
int[][] arr2 = {{1,2,3},{4,5,6},{7,8,9}};
for(int[] row : arr2)
{
for(int element : row)
{
System.out.println(element);
}
}
Integer 类有一个缓存,它会缓存介于-128 – 127之间的整数。
可变参数 type… 变量名,必须放在最的一个。(本质是一个数组)
枚举:我们所定义的每个枚举类型都继承自java.lang.Enum类,枚举中的每个成员默认都是public static final的。
而每个枚举的成员其实就是您定义的枚举类型的一个实例。
下面是一个简单的EnumSet:
enum FontConstant
{
Plain,Bold,Italilc,Hello
}
public class EnumSetDemo
{
public static void main(String[] args)
{
EnumSet<FontConstant> enumSet = EnumSet.of(FontConstant.Plain,FontConstant.Bold);
showEnumSet(enumSet);
showEnumSet(EnumSet.complementOf(enumSet));
}
public static void showEnumSet(EnumSet enumSet)
{
for(Iterator<E> iter = enumSet.iterator();iter.hasNext())
{
System.out.println(iter.next());
}
}
}
Import static 静态导入,要一直导入到类中的 静态成员变量和方法 这个层次上。
相关文章推荐
- 黑马程序员_java基础学习笔记03_函数以及数组知识
- 黑马程序员-自己总结的java学习笔记(6)集合类
- 黑马程序员 Java学习笔记 (day11)
- 黑马程序员_学习笔记:1) 学习方法与Java概述
- 黑马程序员——JAVA学习笔记(三)
- 黑马程序员-Java学习笔记之设计模式(单例设计模式,装饰设计模式,模板设计模式)
- 黑马程序员——java基础学习笔记——第八天
- 黑马程序员—11—java基础:有关线程通信的学习笔记和学习心得体会
- 黑马程序员—20—java基础:有关GUI图形用户界面学习笔记和学习心得体会
- 黑马程序员---java学习笔记之网络编程
- 黑马程序员——Java基础学习笔记(二)
- 黑马程序员_java基础加强学习笔记之注解
- 黑马程序员---java学习笔记之其他对象
- 黑马程序员 Java基础学习笔记5 类
- 黑马程序员 Java基础学习笔记6 类
- 黑马程序员——java基础学习笔记——第二天
- 黑马程序员_java数组学习笔记
- 黑马程序员java学习笔记——数组
- 黑马程序员-学习笔记1-java程序的特性
- 黑马程序员--java学习笔记第十天