网站建设费用的账务处理,wordpress 七牛云加速,提升学历英语翻译,微信开发者工具开发小程序本篇博客将详细讲解Java中的List。 文章目录 预备知识——初识泛型泛型的引入泛型小结 预备知识——包装类基本数据类型和包装类直接对应关系装包与拆包 ArrayList简介ArrayList使用ArrayList的构造ArrayList常见操作ArrayList遍历 结尾 预备知识——初识泛型
泛型的引入
我…本篇博客将详细讲解Java中的List。 文章目录 预备知识——初识泛型泛型的引入泛型小结 预备知识——包装类基本数据类型和包装类直接对应关系装包与拆包 ArrayList简介ArrayList使用ArrayList的构造ArrayList常见操作ArrayList遍历 结尾 预备知识——初识泛型
泛型的引入
我们之前实现过的顺序表只能保存int类型的元素如果现在需要保存指向String类型对象的引用的顺序表请问应该如何解决
这个时候就需要引入泛型这个概念了。
泛型的意义
自动对类型进行检查自动对类型进行强制类型的转换
示例代码
class MyArrayListE {private E[] elem;private int usedSize;public MyArrayList() {this.elem (E[]) new Object[10];}public void add(E val) {this.elem[usedSize] val;usedSize;}public E get(int pos) {return this.elem[pos];}
}public class TestDemo {public static void main(String[] args) {MyArrayListString myArrayList new MyArrayList();myArrayList.add(ABC);myArrayList.add(DEF);System.out.println(myArrayList.get(1));}
}执行结果为 泛型小结 泛型是为了解决某些容器、算法等代码的通用性而引入并且能在编译期间做类型检查。 泛型利用的是 Object 是所有类的祖先类并且父类的引用可以指向子类对象的特定而工作。 泛型是一种编译期间的机制即 MyArrayListInteger 和MyArrayListString 在运行期间是一个类型。 泛型是 java 中的一种合法语法标志就是尖括号。
预备知识——包装类
基本数据类型和包装类直接对应关系
基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean
装包与拆包
示例代码
Integer a 123;//隐式的装包
int b a;//隐式的拆包Integer a2 Integer.valueOf(123);//显式的装包
Integer a3 new Integer(123);//显式的装包int b2 a2.intValue();//显式的拆包ArrayList
简介
在集合框架中ArrayList是一个普通的类实现了List接口具体框架图如下 说明 ArrayList实现了RandomAccess接口表明ArrayList支持随机访问。 ArrayList实现了Cloneable接口表明ArrayList是可以clone的。 ArrayList实现了Serializable接口表明ArrayList是支持序列化的。 和Vector不同ArrayList不是线程安全的在单线程下可以使用在多线程中可以选择Vector或者CopyOnWriteArrayList。 ArrayList底层是一段连续的空间并且可以动态扩容是一个动态类型的顺序表。
ArrayList使用
ArrayList的构造
方法解释ArrayList()无参构造ArrayList(Collection? extends E c)利用其他Collection构建ArrayListArrayList(int initialCapacity)指定顺序表初始容量
示例代码
public static void main(String[] args) {ListInteger list1 new ArrayList();//构造一个空的列表ListInteger list2 new ArrayList(10);//构造一个具有10个容量的列表list2.add(1);list2.add(2);list2.add(3);ArrayListInteger list3 new ArrayList(list2);//list3构造好之后与list2中的元素一致
}结论
如果ArrayList调用不带参数的构造方法那么顺序表的大小是0。当第一次add的时候整个顺序表才变为了10当这10个放满了开始扩容以1.5倍的方式进行扩容。
如果调用的是给定容量的构造方法那么顺序表的大小是所给的容量放满之后还是以1.5倍进行扩容。
ArrayList常见操作
方法解释boolean add(E e)尾插evoid add(int index, E element)将e插入到index位置boolean addAll(Collection? extends E c)尾插c中的元素E remove(int index)删除index位置元素boolean remove(Object o)删除遇到的第一个oE get(int index)获取下标index位置元素E set(int index, E element)将下标index位置元素设置为elementvoid clear()清空boolean contains(Object o)判断o是否在线性表中int indexOf(Object o)返回第一个o所在下标int lastIndexOf(Object o)返回最后一个o的下标ListE subList(int fromIndex, int toIndex)截取部分list
示例代码
ListString list new ArrayList();
list.add(abc);
list.add(def);
list.add(ABC);
list.add(EFG);
System.out.println(list);
System.out.println(list.size());//获取list中有效元素个数
System.out.println(更改指定元素);
System.out.println(list.get(1));
list.set(1,xyz);
System.out.println(list.get(1));
System.out.println(插入指定元素);
list.add(1,LMN);//在list的index位置插入指定元素index及后续的元素统一往后移动一个位置
System.out.println(list);
System.out.println(删除指定元素);
list.remove(ABC);//删除指定元素找到了就删除该元素之后的元素统一往前移动一个位置
System.out.println(list);
if(list.contains(OPQ)) {list.add(OPQ);
}
System.out.println(查找指定元素第一次出现的位置);
System.out.println(list.indexOf(EFG));//indexOf从前往后找
System.out.println(list.lastIndexOf(EFG));//lastIndexOf从后往前找
System.out.println();
ListString ret list.subList(1,3);
System.out.println(ret);list.clear();
System.out.println(list.size());执行结果为 ArrayList遍历
示例代码
ListInteger list new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
//直接打印
System.out.println(list);
//使用for循环
for (int i 0; i list.size(); i) {System.out.print(list.get(i) );
}
System.out.println();
//使用for-each
for (Integer s : list) {System.out.print(s );
}
System.out.println();
//迭代器打印——Iterator
IteratorInteger it list.iterator();
while(it.hasNext()) {System.out.print(it.next() );
}
System.out.println();
//迭代器打印——ListIterator
ListIteratorInteger it1 list.listIterator();
while(it1.hasNext()) {System.out.print(it1.next() );
}
System.out.println();执行结果为 结尾
本篇博客到此结束。 上一篇博客Java学习苦旅十五——异常 下一篇博客Java学习苦旅十七——栈和队列