您的位置:首页 > 职场人生

黑马程序员_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 静态导入,要一直导入到类中的 静态成员变量和方法 这个层次上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: