第十九章  集合

一、数组弊端:

  数组长度是固定的,无法继续添加元素。

二、什么是集合:

  Java提供一个集合类,它的长度是可以改变的,能储存任意的对象,长度随着元素的增加而增加。

三、集合和数组的区别:

  1.数组:能存放引用数据类型和基本数据类型。

  2.集合:只能存放引用数据类型(对象),即使存放基本数据类型,也会自动帮你装箱,把基本数据类型转换为引用数据类型。

  3.数组长度是固定的,集合长度能够改变。

四、什么时候用数组,什么时候用集合?

  1.如果元素个数固定,用数组

  2.对元素进行增删改查操作时,使用集合。

五、集合类:

1、创建一个集合:

 Collection c = new ArrayList();

2、向集合内添加元素:

 Collection c = new ArrayList();
boolean b1 = c.add("abc");
boolean b2 = c.add(10);
boolean b3 = c.add(true);

3、删除集合内指定元素:

 ArrayList c2 = new ArrayList();
c2.add("a");
3 c2.add("b");
c2.add("c");
System.out.println(c2); //从集合中移除指定元素
c2.remove("b");
System.out.println(c2);

4、判断一个集合是否为空:

 //判断一个集合是否为空
System.out.println(c2.isEmpty());

5、获取集合的长度:

 // 获取集合当中的长度
System.out.println(c2.size());

7、清空集合内的所有元素:

 // 清空集合内所有元素
c2.clear();
System.out.println(c2);

8、合并两个集合:

 c1.addAll(c2);

9、从c1中删除两个集合的交集:

 c1.removeAll(c2);

10、判断c1中是否完全包含c2:

 //boolean res = c1.containsAll(c2);
//System.out.println(res);

11、取交集,将交集的值赋值给c1:

 boolean b1 = c1.retainAll(c2);
System.out.println(b1);
System.out.println(c1);

12、通过数组遍历集合:

Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
//将集合转化为数组,所有元素提升为Object类型
Object []arr = c.toArray();
for(int i = 0;i<arr.lengthi;i++){
System.out.println(arr[i]);
}

六、ArrayList集合:

1、使用迭代器遍历集合:

 List list = new ArrayList();
list.add("a");
list.add("2");
list.add("c");
list.add("d"); //1.遍历集合
Iterator it = list.iterator();
while(it.hasNext()){
System.out.pringln(it.next());
}
}

2、并发修改异常:

  在迭代集合过程中,是不允许修改集合结构的,比如添加,删除元素(个数的改变),如果改变了,就会发生并发修改异常。

3、List 当中特有的迭代器,在删除修改时,不会造成并发修改异常。

 ListIterator it = list.listIterator();

4、去除List集合中的重复元素:

     static ArrayList getSingleEle(ArrayList list) {
// 1.创建一个新的集合
ArrayList newa1 = new ArrayList();
// 2.将一次取出每一个元素
Iterator itr = list.iterator();
while (itr.hasNext()) {
Object obj = itr.next();
// 3.每次取出元素都会判断新集合中已经有该元素
// 4.如果是已有元素,不把元素存放到新集合中
if (!newa1.contains(obj)) {
newa1.add(obj);
}
}
//System.out.println(newa1);
return newa1;
}

5、去除集合内重复的元素为对象时,重写equals方法:

 class Student {
String name;
int age; Student(String name, int age) {
this.name = name;
this.age = age;
} @Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
} // 做对象的比较,不想让其对比地址,必须要覆盖equals 根据自己的需求来定义什么时候相等(也可以通过快速生成)
public boolean equals(Object obj) {
Student stu = (Student) obj;
return this.name.equals(stu.name) && this.age == stu.age;
} }

6、LinkedList集合:

         LinkedList list = new LinkedList();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);

7、Vector集合:

     public static void main(String[] args) {
//Vector 只是在内部进行了加锁,更加的安全
Vector v = new Vector();
v.add("a");
v.add("b");
v.add("c");
System.out.println(v); } }

最新文章

  1. 《BI项目笔记》多维数据集中度量值设计时的聚合函数
  2. android media server 解析1-media player service 结构部分
  3. 桐桐的贸易--WA
  4. 真正意义上下一代 Windows Embedded:有关 Windows 10 &quot;Athens&quot; 的事
  5. 1.Spring IoC简单例子
  6. sed命令教程
  7. jQuery旋转插件
  8. Android SDK Web SDK 接口测试总结
  9. Javascript基础知识小测试(一)
  10. 为什么我们要使用Async、Await关键字
  11. centos7 部署dns服务器
  12. 第四周博客作业&lt;西北师范大学|李晓婷&gt;
  13. apply,all,bind的区别
  14. Windows Server 2016-增强IPAM
  15. wcf 发布到iis后报错
  16. 马士兵2string buffuer
  17. PythonStudy——字符编码 Character Encoding
  18. mysql迁移到ubuntu遇到到问题
  19. bzoj5010: [Fjoi2017]矩阵填数
  20. Java NIO系列教程(三) Buffer

热门文章

  1. c++linux多线程基础知识
  2. springboot结合jsp页面详解
  3. vue - 登录验证与权限控制
  4. create-react-app 构建的项目使用 mobx (说到底就是为了使用装饰器语法对 babel 做些配置
  5. [CSP-S模拟测试]:Cicada拿衣服(暴力+乱搞)
  6. Arthas随笔
  7. a标签点击,页面自动刷新
  8. 网站运营文章LIST
  9. kafka-manager怎么查看topic里的数据量
  10. 一、Appium+python环境搭建