java学习第一阶段4

来源:互联网 发布:nginx 域名访问不了 编辑:程序博客网 时间:2024/05/01 08:01

1.泛型:泛型就是类变量类型的参数化,当我们在定义一个类的时候不确定里面参数到底使用Integer、Boolean等,这个时候我们就可以使用泛型。但是泛型不允许我们定义泛型数组,比如Arraylist如果允许定义泛型数组的话,它在编译的时候就需要里面存放数据的数组到底是什么类型,以此来开辟数据空间大小。在别人使用的时候存入String或者其他对象类型的时候再通过强制转换来操作。泛型需要在定义类名称后面指定。

2.泛型嵌套泛型的例子:

public class Test3<T>
{
private GereralFoo<T> gereralFoo;
public GereralFoo<T> getGereralFoo()
{
return gereralFoo;
}
public void setGereralFoo(GereralFoo<T> gereralFoo)
{
this.gereralFoo = gereralFoo;
}
public static void main(String[] args)
{
GereralFoo<String> gereralFoo = new GereralFoo<String>();
gereralFoo.setFoo("hexinli");
Test3<String> test = new Test3<String>();
test.setGereralFoo(gereralFoo);
System.out.println(test.getGereralFoo().getFoo());
}
}
class GereralFoo<T>
{
private T foo;
public T getFoo()
{
return foo;
}
public void setFoo(T foo)
{
this.foo = foo;
}
}

3.在做一个题目的时候思考了很久,一开始无从下手:题目要求采用策略设计模式完成一个学生按名字正、反序排序。目的是对一个集合做排序,怎么排就是策略需要考虑的事情了。

以此我们需求顶一个接口完成学生排序这样一件事情:

public class Person
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}

目的接口:

public interface Sort
{
public void sorts(List<Person> person);
}

实现接口的类型:

public class SortByName implements Sort, Comparator<Person>
{
@Override
public void sorts(List<Person> person)
{
Collections.sort(person, this);
}
@Override
public int compare(Person o1, Person o2)
{
return o1.getName().compareTo(o2.getName());
}
}

环境对象:

public class UseEnvironment
{
private Sort sort;

public UseEnvironment(Sort sort)
{
this.sort = sort;
}

public void setSort(Sort sort)
{
this.sort = sort;
}

public void sorts(List<Person> person)
{
this.sort.sorts(person);
}
}

4.jdk1.5新特性自动装箱和拆箱

集合本身是不允许往里面装4、6这种数字型数据,但是因为有了新特性后可以的。本质是将基本数据类型转化为对象类型再加入到集合中。

统计输入参数每个单词出现的次数:

public static void main(String[] args)
{
Map<String, Integer> map = new HashMap<String, Integer>();
Integer num = null;
for (String str : args)
{
num = map.get(str);
map.put(str, num == null ? 1 : num + 1);
}
for (Map.Entry<String, Integer> entry : map.entrySet())
{
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}

5.integer  i1=100和Integer i2=100.是否i1==i2。答案是相等,如果换成200,则不等了。这是因为Integer内会缓存-128~127之间整数的对象。100将不再生成新的对象。但是如果使用Integer i1=new Integer(100);这种new方式生成的二个对象肯定是不相等。这样因为Integer认为-128~127之间是我们需要常用的整数对象。

6.可变参数的定义

public class Test4
{
public static void main(String[] args)
{
Caculate caculate = new Caculate();
System.out.println(caculate.caculate(4, 5, 6));
System.out.println(caculate.caculate(new int[] { 4, 5, 6 }));
}
}

class Caculate
{
//可变参数本身就一直数组类型,一个方法只能有一个可变参数且放到最后。
public int caculate(int... nums)
{
int sum = 0;
for (int num : nums)
{
sum += num;
}
return sum;
}
}

7.

0 0