B站 韩顺平 老师课程的笔记
集合(collection)
本文件讲的是实现Collection接口的集合的共性
独有的看别的文件
集合的优点
- 可以==动态==保存任意多个对象,使用比较方便
- 提供一系列方便的操作对象的方法:add、remove、set、get等(相当于增删改查都写好了)
- 使用集合添加,删除新元素更简洁方便
数组的不足之处
- 长度开始必须指定,而且一旦指定不能更改
- 保存的必须为同一类型的的元素
- 使用数组进行增加/删除元素比较麻烦
总之,灵活性不够
集合的框架体系(常用)
Collection接口继承了Iterable接口
Collection接口被List接口和Set接口实现了
List接口被Vector、ArrayList、LinkedList类实现了
Set接口被TreeSet、HashSet类实现了
List是有序的,Set是无序的(有序指的是添加顺序和取出顺序相同)
不同集合之间的区别
取长度方面
==主要注意是length、length()还是size()==
普通数组:int[] a = new int[10]; ==> a.length;
字符串:String a = “zhang”; ==> a.length();
StringBuffer、StringBuilder ==> a.length();
Collection(List(ArrayList、LinkedList、Vector)、Set(TreeSet、HashSet)) ==> col.zise();
Map(HashMap、TreeMap、HashTable) ==> map.size();
Stack ==> stack.size();
Queue(LinkedList、ArrayQueue) ==> queue.size();
Deque(ArrayDeque、LinkedList) ==> deque.size();
==总结==
普通数组用length;字符串以及和字符串有关的StringBuffer等用length();集合有关的都用size()
存取方法
Collection接口下的List、Set接口的方法都是使用add()添加、使用get()取出元素
Map接口下的实现类都是使用put(K,V)进行存,使用get()取
Stack使用push()或add()存、使用pop()、get()、peek()取
Queue、和Deque都是接口,其实现类都可是LinkedList,使用offer()、add()进行存、使用poll()、pop()、peek()、get()取
常用方法
add:添加单个元素
remove:删除单个元素
contains:查找元素是否存在
size:获取元素个数
isEmpty:判断是否为空
clear:清空
addAll:添加多个元素
containsAll:查找多个元素是否都存在
removeAll:删除多个元素
以ArrayList演示,可看文件:ArrayList
代码展示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| public static void main(String[] args) { List arrayList = new ArrayList();
arrayList.add("jack"); arrayList.add(10); arrayList.add(true); arrayList.add(21.001); arrayList.add(3, false); System.out.println("arrayList= " + arrayList);
arrayList.remove(0); System.out.println("arrayList= " + arrayList); arrayList.remove(true); System.out.println("arrayList= " + arrayList); arrayList.add(0, "tom");
System.out.println("找jack " + arrayList.contains("jack")); System.out.println("找tom " + arrayList.contains("tom")); boolean con = arrayList.contains(false); System.out.println("找false(arrayList中的一个对象) " + con);
System.out.println("先看一下有几个元素:" + arrayList); System.out.println("用size()输出元素个数:" + arrayList.size()); int size = arrayList.size(); System.out.println("得到返回值后再输出" + size);
System.out.println("arrayList.isEmpty(): " + arrayList.isEmpty()); List arrayList2 = new ArrayList(); System.out.println("arrayList2.isEmoty(): " + arrayList2.isEmpty());
arrayList2.add("有元素了"); arrayList2.add("yes"); System.out.println("调用clear()前的arrayList2: "+arrayList2); arrayList2.clear(); System.out.println("调用clear()后的arrayList2: "+arrayList2);
System.out.println("使用addAll()前的arrayList: " + arrayList); arrayList2.add("西游记"); arrayList2.add("三国演义"); arrayList.addAll(arrayList2); System.out.println("使用addAll()后的arrayList: " + arrayList);
System.out.println("arrayList" + arrayList); System.out.println("arrayList2" + arrayList2); System.out.println(arrayList.containsAll(arrayList2));
arrayList.removeAll(arrayList2); System.out.println("删除arrayList2元素后的arrayList:" + arrayList); }
|
集合遍历
迭代器遍历
iterator对象成为迭代器,主要用于遍历Collection集合中的元素
实现了Collection接口的的集合类都有一个iterator()方法,用以返回一个实现了iterator接口的对象
iterator的方法
Iterator iterator = coll.iterator();//得到一个集合的迭代器
hasNext():判断是否还有下一个元素
next():指针下移,将下移以后集合位置上的元素返回(有两步)
==在使用next()前一定要使用hasNext()判断==
==得到next一定要用Object类型来引用,即只能:Object = iterator.next()==
使用代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| public class CollectionIterator01 { public static void main(String[] args) { Collection col = new ArrayList();
col.add(new Book("三国演义","罗贯中" , 110)); col.add(new Book("西游记","吴承恩",150)); col.add(new Book("红楼梦","曹雪芹",115));
System.out.println(col);
Iterator iterator = col.iterator(); while(iterator.hasNext()){ Object next = iterator.next(); System.out.println(next); }
iterator = col.iterator(); while(iterator.hasNext()){ Object next = iterator.next(); System.out.println(next); } } } class Book{ private String name; private String author; private int price;
public Book(String name, String author, int price) { this.name = name; this.author = author; this.price = price; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getAuthor() { return author; }
public void setAuthor(String author) { this.author = author; }
public int getPrice() { return price; }
public void setPrice(int price) { this.price = price; }
@Override public String toString() { return "书名:" + name + " 作者:" + author + " 价格:" + price; } }
|
增强for循环遍历
相当于是使用简便的迭代器
使用代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public static void main(String[] args) { Collection col = new ArrayList();
col.add(new Book("三国演义","罗贯中" , 110)); col.add(new Book("西游记","吴承恩",150)); col.add(new Book("红楼梦","曹雪芹",115));
for(Object book : col){ System.out.println("book = " + book); }
}
|