Java学习笔记(四)ArrayList 和泛型类
一、ArrayList
在Java里若想有一个可变大小的数组,用ArrayList是其中之一的解决方法,它是一个采用类型参数的泛型类。为了制定数组列表保存的元素对象类型,需要用一对尖括号将类名括起来加在后面,就如ArrayList<String>。
1.声明构造方法:
ArrayList<String> strlist = new ArrayList<String>();//这里是声明了一个字符串类型的数组,现数组为空
ArrayList<String> strlist = new ArrayList<>(10);//Java SE 7后,第二个尖括号里的类型可以省略,且可以在声明时给上数组初始大小;
2.ArrayList 只接受对象类型,不支持基础数据类型,若要创建整型数组可
ArrayList<Integer> intlist = new ArrayList<>(10);
3.创建好的数组不能用 [ index ] 直接访问,必须通过其方法进行访问
4.ArrayList 的方法:
- boolean add(E obj)
在数组列表的尾端添加一个元素,若当前数组大小已满,会自动拓展一位。永远返回ture(E 为对象类型,下同)
参数:obj ;即添加的元素
- int size()
返回存储在数组列表中的当前元素数量
- void ensureCapacity(int capacity)
确保数组列表在不重新分配存储空间的情况下就能够保存给定数量的元素。
参数:capacity;即需要存储容量
- void trimToSize()
将数组列表的存储容量消减到当前尺寸
- E get(int index)
获得指定位置的元素之
参数:index;
- void add(int index, E obj)
将obj 插入到index位置上,同样若当前数组大小已满会自动扩张
参数:index;插入位置(0 - size()-1)
- E remove(int index)
删除index位置上的元素,并将后面的元素向前移动。被删除元素作为返回值返回
参数:index;被删除的元素位置
二、泛型类
泛型类是具有一个或多个类型变量的类,以下这里只关心泛型。用泛型类意味着编写的代码可以被很多不同类型的对象所重用,提高了代码的复用性。上述ArrayList类就是泛型类设计的实例
1.泛型类的定义
package hello;
public class TestGeneric<T>//若要传入多个变量,在<>内添加类型即可
{ //如public class TestGeneric<T,U,M> {}
private T first;
private T second;
public TestGeneric()
{
first = null;
second = null;
}
public void setFirst(T newValue)
{
this.first = newValue;
}
public void setSecond(T newValue)
{
this.second = newValue;
}
public T getFirst()
{
return this.first;
}
public T getSecond()
{
return this.second;
}
}
2.泛型类的使用
TestGeneric<Integer> p = new TestGeneric<>();//构造Integer类型的实例
p.setFirst(new Integer(11));
System.out.println(p.getFirst());
TestGeneric<String> p = new TestGeneric<>();//构造String类型的实例
p.setFirst(new String("hello"));
System.out.println(p.getFirst());
3.泛型方法
一个普通的类里,也可以有泛型方法
public <T> void repeater(T content)
{
System.out.println(content);
}
这里在一个普通类里定义了一个在控制台打印出输入的内容
调用时,需要在方法前面添加<>和参数类型:
one.<String>repeater(new String("how are you?"));
这里的T类型要一致,否则在编译时就会报错(这个是泛型方法的好处之一)
4.泛型的字母规范
E:表示集合的元素类型
K、V:分别表示表的关键字和值的类型
T:表示任意类型,如String Integer,需要时可以用临近字母U和S表示任意类型