day8集合
一:Collection接口
Collection接口是集合中的顶层接口
Collecton接口常用的子接口有:List接口、Set接口
List接口常用的子类有:ArrayList类、LinkedList类
Set接口常用的子类有:HashSet类、LinkedHashSet类
1.1 Collection接口的基本方法
Collection<String> coll = new ArrayList<String>();
//1,往集合中添加对象元素。add(Object);
coll.add("ityouxin1");
coll.add("ityouxin2");
coll.add("ityouxin3");
//2,删除。
coll.remove("ityouxin2");
//3,判断是否包含。
System.out.println(coll.contains("ityouxin11"));
//4,清除。
coll.clear();
//把集合打印一下。
System.out.println(coll);//[ityouxin1, ityouxin2, ityouxin3]
二:List接口
1、 实现List接口的集合类中的元素是有序的,且允许重复。
2、 List集合中的元素都对应一个整数型的序号记载其在集合中的位置,可以根据序号存取集合中的元素。
JDK API所提供的List集合类常用的有:
ArrayList(重点,必须掌握)
LinkedList
Vector(不常用)
常用方法 :
void add(int index, E element) :在指定的索引处插入一个元素;
E get(int index) :根据索引得到元素
ListIterator<E> listIterator?() :
E remove(int index) : 删除指定索引处的元素;
E set(int index, E element) :修改指定索引处元素
List<E> subList(int fromIndex, int toIndex) : 在指定的范围内截取出来一个小列表;
二: Iterator迭代器
Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
集合中把这种取元素的方式描述在Iterator:
常用方法:
hasNext()方法:用来判断集合中是否有下一个元素可以迭代。如果返回true,说明可以迭代。
next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
//1,创建集合对象。
Collection<String> coll = new ArrayList<String>();
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
//2.获取容器的迭代器对象。通过iterator方法。
Iterator it = coll.iterator();
//3,使用具体的迭代器对象获取集合中的元素。参阅迭代器的方法
while(it.hasNext()){
System.out.println(it.next());
}
/*
迭代器for循环的形式的使用
for (Iterator it = coll.iterator(); it.hasNext(); ) {
System.out.println(it.next());
}
*/
注意:在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将发生java.util.NoSuchElementException没有集合元素的错误
三:增强for循环
格式:for(元素的数据类型 变量 : Collection集合or数组){
}
练习一:遍历数组
int[] arr = new int[]{11,22,33};
for (int n : arr) {//变量n代表被遍历到的数组元素
System.out.println(n);
}
练习二:遍历集合
Collection<String> coll = new ArrayList<String>();
coll.add("ityouxin1");
coll.add("ityouxin2");
coll.add("ityouxin3");
coll.add("ityouxin4");
for(String str : coll){//变量Str代表被遍历到的集合元素
System.out.println(str);
}
四:泛型
泛型用来灵活地将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数传递。
好处:避免了类型强制转换的麻烦.
publicclass GenericDemo {
publicstaticvoid main(String[] args) {
Collection<String> list = new ArrayList<String>();
list.add("abc");
list.add("ityouxin");
//list.add(5);//当集合明确类型后,存放类型不一致就会编译报错
//集合已经明确具体存放的元素类型,那么在使用迭代器的时候,迭代器也同样会知道具体遍历元素类型
Iterator<String> it = list.iterator();
while(it.hasNext()){
String str = it.next();
//当使用Iterator<String>控制元素类型后,就不需要强转了。获取到的元素直接就是String类型
System.out.println(str.length());
}
}
}
一:数据结构
1.1List集合存储数据的结构
1.2LinkedList集合
LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。
[外链图片转存失败(img-Zo4pwIfz-1565228071887)(C:\Users\李红兴\Desktop\1.png)]
Linked是List的子类,List的方法LinkedList都来可以使用
LinkedList<String> link = new LinkedList<String>();
//添加元素
link.addFirst("abc1");
link.addFirst("abc2");
link.addFirst("abc3");
//获取元素
System.out.println(link.getFirst());
System.out.println(link.getLast());
//删除元素
System.out.println(link.removeFirst());
System.out.println(link.removeLast());
while(!link.isEmpty()){ //判断集合是否为空
System.out.println(link.pop()); //弹出集合中的栈顶元素
}
二:Set接口
2.1HashSet集合
2.2Hash集合存储数据结构(哈希表)
2.3HashSet存储Java中的类型元素
(!link.isEmpty()){ //判断集合是否为空
System.out.println(link.pop()); //弹出集合中的栈顶元素
}
二:Set接口
2.1HashSet集合
2.2Hash集合存储数据结构(哈希表)
2.3HashSet存储Java中的类型元素
2.4HashSet存储自定义类型元素