集合学习(一)
ArraysList
ArraysList集合就像C++中的vector容器,它可以不考虑其容器的长度,就像一个大染缸一
样,无穷无尽的丢进去也没问题。Java的数据结构和C有许多的共同之处,希望在学习的
过程中可以相互借鉴。
以下为ArraysList的使用方法: 首先创建ArraysList对象: ArraysList A = new ArraysList();
- 添加对象实例: 有两种添加方法,一是直接添加,放到后面去,二是指定位置添加:
一直接添加:A.add( 对象名 ); 二: 指定位置添加 : A.add( 数字 , 对象名 );
- 判断容器是否存在某对象: A.comtains( 对象名 ) //是判断是否是同一个对象
- 获取指定位置的对象 : A. get ( 数字 )
- 获取对象的指定位置 : A.indexOf ( 对象名 )
- 获取并删除 :A.remove( 数字)
- 替换 : A.set( 数字 , 要替换的对象 )
- 获取大小
- 转换为数组 :
- 把另一个容器的对象都加进来:A.addAll( 容器名 );
- 清空:
虽然ArraysList有着太多的方便,但是因为有着太多的各种不同的类的对象,这会导致
强制转换出现问题,于是,泛型就出现了,泛型要求一个ArraysList只能存入一种类型的
对象,这样既保存了方便,又可以避免类型错误。
创建一个泛型:
原则:只能存放该类型以及其子类。
遍历方法:
- 利用for循环进行便利,for( int i = 0 ; i < A.size() ; i++){}
- 迭代器经行遍历:
创建迭代器: Iterator It = A.iterator();
循环:A.hasNext();
获取对象:Hero H = A.next();
- 增强型for循环 :for( Hero H : A){}
===============================================================================
LinKedList
LinkedList同样实现了list接口,可以拥有和ArraysList一样的方法,除此之外,它还实现了Deque接口,它
的储存方式像链表一样,可以很方便的在头部或尾部进行插入或删除(但也不是一般的链表,是双向链表)
创建LinkedList容器:
LinkedList<Hero> Hs = new LinkedList<>();
区别于ArraysList之外的特殊的使用方法:
查看首部元素: Hs.getFirst( );
查看尾部元素:
获取并删除首部元素:
获取并删除尾部元素:
除此之外,LinkedList也实现了Queue接口,可以作为队列使用,以下是将LinkedList作为队列使用的方法:
- 将元素插入后面:Hs.offer( new Hero(“盖伦”);
- 取出并删除第一个元素:Hs.poll();
- 拿第一个元素出来瞧一瞧但放回去
讨论:Arrayslist 和 LinkedList的区别:
ArraysList 插入数据,删除数据 效率低下
LinkedList 插入数据,删除数据 速度很快
ArraysList 定位很快
LinkedList 定位很慢