---------------------- 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 静态导入,要一直导入到类中的 静态成员变量和方法 这个层次上。