1、LinkedList类(掌握)

1、特点

底层数据结构是链表,查询慢,增删快
线程不安全,效率高。


LinkedList 成员方法
void addFirst(Object o)
添加
void addLast(Object o)
Objcet getFirst()
获取
Object getLast()
Object removeFirst()
删除
Object removeLast()
  

2、栈和队列数据结构(掌握)

1、栈
     特点:先进后出
2、队列
     特点:先进先出
3、数组
     特点:查询快,增删慢
4、链表
     特点:查询慢,增删快

数据结构面试题:模仿Stack

3、泛型(能看懂什么是泛型的声明,什么是泛型的使用即可)

1、概述

     泛型是一种把明确类型的工作放在了创建对象或者调用方法时候才去明确的特殊的类型
     泛型就相当于一个预定义类型

2、好处(掌握)
     B、把系统运行期间的异常提前到了编译期间,提高了安全性
     C、优化了程序设计,不需要做强制转换了

3、不足(掌握)
     泛型传入的只能是引用类型

4、泛型通配符
     <?>  任意类型
    <? extends E> E包括E的子类,也叫向下限定
    <? super E> E包括E的父类,也叫向上限定

3、泛型的定义
     A、在类上定义
          说明:
               T,S是名字,可以随意起,该处定义的泛型可以在本类的任意地方使用
               父类上定义的泛型不能被子类继承
  1. /**在类上定义一个泛型*/
  2. class Person1<T> {
  3. }
  4. /**在类上定义两个泛型*/
  5. class Person2<T,S>{
  6. }
  7. /**在类上定义两个泛型,且第二个类型S必须F或者F的子类*/
  8. class Person3<F, S extends F>{
  9. }

      B、在方法上定义
          因为返回值类型也可能会用到泛型类型,所以泛型的声明要在返回值之前
          说明:
               T,S是名字,可以随意起,该处定义的泛型可以在该方法的任意地方使用

  1. /**在方法上声明一个泛型*/
  2. public <T> void show(T t){
  3. }
  4. /**在方法上声明两个泛型*/
  5. public <T,S> void show(T t, S s){
  6. }
  7. /**在方法上声明两个泛型,切第二个类型S必须是F或者F的子类*/
  8. public <F,S extends F> void show(){
  9. }

     C、在接口上定义泛型
         和在类上定义一样

3、泛型的使用
     可以在继承关系,实现关系,创建对象时使用

4、易错题解析
  1. interface English<T> {
  2. void speakEnglish();
  3. }
  4. /**
  5. *
  6. * 问题:可以调用以下String中的substring方法吗
  7. * 第一个<String>是声明一个泛型,名字叫String
  8. * 第二个<String>是使用刚才声明好的泛型
  9. * 所以这两个String与java.lang包下的String没有任何关系
  10. */
  11. class Person<String> implements English<String>{
  12. @Override
  13. public void speakEnglish() {
  14. }
  15. }

4、静态导入(了解)

1、概述
    静态导入是导入类中静态方法

2、格式
    import static 包名….类名.方法名;

3、注意事项
    方法必须是静态的,如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。
    静态导入开发不用,但是需要能看懂

4、案例
  1. import static java.util.Arrays.sort; //静态导入
  2. public class Demo2_StaticImport {
  3. public static void main(String[] args) {
  4. int[] arr = {55,22,33,44,11};
  5. sort(arr);
  6. }
  7. }

5、增强for循环(掌握)

1、格式

     for(数组 或 Collection子类 的元素类型 变量名 :数组 或 Collection子类)
     {
          //使用变量
     }

2、好处
     方便数组和集合的遍历

3、注意事项
     增强for是用来代替Iterator的
     不要再遍历的时候用集合对集合本身进行修改

4、集合遍历的四种方式
     1、迭代
     2、将集合转换为数组(忘记吧)
     3、获取集合的长度,通过get()+for遍历
     4、使用for高级循环(常用)
               for(Object obj : list){
                    System.out.println(obj);
               }

6、可变参数(掌握)

1、概述
    定义方法的时候不知道该定义多少个参数

2、格式
    修饰符 返回值类型 方法名(数据类型…  变量名){}

3、注意事项
    这里的变量其实是一个数组
    如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
  1. package com.heima.jdk5;
  2. public class Demo3_ChangeableArgs {
  3. public static void main(String[] args) {
  4. print(11,22,33,44,55);
  5. }
  6. public static void print(int ... arr) { //可变参数其实是一个数组
  7. for (int i = 0; i < arr.length; i++) {
  8. System.out.println(arr[i]);
  9. }
  10. }
  11. }

7、案例(掌握)

1、ArrayList去除集合中字符串的重复值(字符串的内容相同),创建新集合方式

2、ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同),因为contains方法比较对象的equals方法,所以自定义对象要重写equals方法

3、数据结构面试题:用LinkedList模拟栈结构(栈结构:先进后出)

4、ArrayList存储自定义对象和String类型数据,通过泛型实现

5、Arrays.asList练习

6、ArrayList   嵌套 ArrayList 练习

8、案例代码(掌握)

1、ArrayList去除集合中字符串的重复值(字符串的内容相同),创建新集合方式
  1. package com.heima.list;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. @SuppressWarnings({ "rawtypes", "unchecked" })
  5. public class Demo1_ArrayList {
  6. /**
  7. * * A:案例演示
  8. * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)
  9. * 思路:创建新集合方式
  10. */
  11. public static void main(String[] args) {
  12. ArrayList list = new ArrayList();
  13. list.add("a");
  14. list.add("a");
  15. list.add("b");
  16. list.add("b");
  17. list.add("c");
  18. list.add("c");
  19. list.add("c");
  20. list.add("c");
  21. ArrayList newList = getSingle(list);
  22. System.out.println(newList);
  23. }
  24. /*
  25. * 创建新集合将重复元素去掉
  26. * 1,明确返回值类型,返回ArrayList
  27. * 2,明确参数列表ArrayList
  28. *
  29. * 分析:
  30. * 1,创建新集合
  31. * 2,根据传入的集合(老集合)获取迭代器
  32. * 3,遍历老集合
  33. * 4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加
  34. */
  35. public static ArrayList getSingle(ArrayList list) {
  36. ArrayList newList = new ArrayList<>(); //1,创建新集合
  37. Iterator it = list.iterator(); //2,根据传入的集合(老集合)获取迭代器
  38. while(it.hasNext()) { //3,遍历老集合
  39. Object obj = it.next(); //记录住每一个元素
  40. if(!newList.contains(obj)) { //如果新集合中不包含老集合中的元素
  41. newList.add(obj); //将该元素添加
  42. }
  43. }
  44. return newList;
  45. }
  46. }



2、ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同),因为contains方法比较对象的equals方法,所以自定义对象要重写equals方法
  1. package com.heima.list;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import com.heima.bean.Person;
  5. @SuppressWarnings({ "rawtypes", "unchecked" })
  6. public class Demo2_ArrayList {
  7. /**
  8. * * A:案例演示
  9. * 需求:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)
  10. * B:注意事项
  11. * 重写equals()方法的
  12. contains方法判断是否包含,底层依赖的是equals方法
  13. remove方法判断是否删除,底层依赖的是equals方法
  14. */
  15. public static void main(String[] args) {
  16. ArrayList list = new ArrayList(); //创建集合对象
  17. list.add(new Person("张三", 23));
  18. list.add(new Person("张三", 23));
  19. list.add(new Person("李四", 24));
  20. list.add(new Person("李四", 24));
  21. list.add(new Person("李四", 24));
  22. list.add(new Person("李四", 24));
  23. //ArrayList newList = getSingle(list); //调用方法去除重复
  24. //System.out.println(newList);
  25. list.remove(new Person("张三", 23));
  26. System.out.println(list);
  27. }
  28. /*
  29. * 创建新集合将重复元素去掉
  30. * 1,明确返回值类型,返回ArrayList
  31. * 2,明确参数列表ArrayList
  32. *
  33. * 分析:
  34. * 1,创建新集合
  35. * 2,根据传入的集合(老集合)获取迭代器
  36. * 3,遍历老集合
  37. * 4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加
  38. */
  39. public static ArrayList getSingle(ArrayList list) {
  40. ArrayList newList = new ArrayList<>(); //1,创建新集合
  41. Iterator it = list.iterator(); //2,根据传入的集合(老集合)获取迭代器
  42. while(it.hasNext()) { //3,遍历老集合
  43. Object obj = it.next(); //记录住每一个元素
  44. if(!newList.contains(obj)) { //如果新集合中不包含老集合中的元素
  45. newList.add(obj); //将该元素添加
  46. }
  47. }
  48. return newList;
  49. }
  50. }


3、数据结构面试题:用LinkedList模拟栈结构(栈结构:先进后出)
  1. package com.heima.list;
  2. import java.util.LinkedList;
  3. public class Stack {
  4. private LinkedList list = new LinkedList();
  5. /*
  6. * 模拟进栈方法
  7. */
  8. public void in(Object obj) {
  9. list.addLast(obj);
  10. }
  11. /*
  12. * 模拟出栈
  13. */
  14. public Object out() {
  15. return list.removeLast();
  16. }
  17. /*
  18. * 模拟栈结构是否为空
  19. */
  20. public boolean isEmpty() {
  21. return list.isEmpty();
  22. }
  23. }



4、ArrayList存储自定义对象和String类型数据,通过泛型实现
  1. package com.heima.generic;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import com.heima.bean.Person;
  5. public class Demo2_Generic {
  6. /**
  7. * * A:案例演示
  8. * ArrayList存储字符串并遍历泛型版
  9. */
  10. public static void main(String[] args) {
  11. //demo1();
  12. ArrayList<Person> list = new ArrayList<>();
  13. list.add(new Person("张三", 23));
  14. list.add(new Person("李四", 24));
  15. list.add(new Person("王五", 25));
  16. list.add(new Person("赵六", 26));
  17. Iterator<Person> it = list.iterator();
  18. while(it.hasNext()) {
  19. Person p = it.next(); //将集合中的每一个元素用Person记录
  20. System.out.println(p.getName() + "..." + p.getAge());
  21. }
  22. }
  23. public static void demo1() {
  24. ArrayList<String> list = new ArrayList<>(); //创建集合对象
  25. list.add("a");
  26. list.add("b");
  27. list.add("c");
  28. list.add("d");
  29. Iterator<String> it = list.iterator();
  30. while(it.hasNext()) {
  31. System.out.println(it.next());
  32. }
  33. }
  34. }


5、Arrays.asList练习
  1. package com.heima.jdk5;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. public class Demo4_AsList {
  6. /**
  7. * 数组转换成集合
  8. * 数组转换成集合虽然不能增加或减少元素,但是可以用集合的思想操作数组,也就是说可以使用其他集合中的方法
  9. */
  10. public static void main(String[] args) {
  11. //demo1();
  12. //demo2();
  13. //集合转数组,加泛型的
  14. ArrayList<String> list = new ArrayList<>();
  15. list.add("a");
  16. list.add("b");
  17. list.add("c");
  18. list.add("d");
  19. String[] arr = list.toArray(new String[10]); //当集合转换数组时,数组长度如果是小于等于集合的size时,转换后的数组长度等于集合的size
  20. //如果数组的长度大于了size,分配的数组长度就和你指定的长度一样
  21. for (String string : arr) {
  22. System.out.println(string);
  23. }
  24. }
  25. public static void demo2() {
  26. //int[] arr = {11,22,33,44,55};
  27. //List<int[]> list = Arrays.asList(arr); 基本数据类型的数组转换成集合,会将整个数组当作一个对象转换
  28. //System.out.println(list);
  29. Integer[] arr = {11,22,33,44,55}; //将数组转换成集合,数组必须是引用数据类型
  30. List<Integer> list = Arrays.asList(arr);
  31. System.out.println(list);
  32. }
  33. public static void demo1() {
  34. String[] arr = {"a","b","c"};
  35. List<String> list = Arrays.asList(arr); //将数组转换成集合
  36. //list.add("d"); //不能添加
  37. System.out.println(list);
  38. }
  39. }


6、ArrayList   嵌套 ArrayList 练习
  1. package com.heima.list;
  2. import java.util.ArrayList;
  3. import com.heima.bean.Person;
  4. public class Demo5_ArrayListArrayList {
  5. /**
  6. * * A:案例演示
  7. * 集合嵌套之ArrayList嵌套ArrayList
  8. * 案例:
  9. * 我们学科,学科又分为若个班级
  10. * 整个学科一个大集合
  11. * 若干个班级分为每一个小集合
  12. */
  13. public static void main(String[] args) {
  14. ArrayList<ArrayList<Person>> list = new ArrayList<>();
  15. ArrayList<Person> first = new ArrayList<>(); //创建第一个班级
  16. first.add(new Person("杨幂", 30));
  17. first.add(new Person("李冰冰", 33));
  18. first.add(new Person("范冰冰", 20));
  19. ArrayList<Person> second = new ArrayList<>();
  20. second.add(new Person("黄晓明", 31));
  21. second.add(new Person("赵薇", 33));
  22. second.add(new Person("陈坤", 32));
  23. //将班级添加到学科集合中
  24. list.add(first);
  25. list.add(second);
  26. //遍历学科集合
  27. for(ArrayList<Person> a : list) {
  28. for(Person p : a) {
  29. System.out.println(p);
  30. }
  31. }
  32. }
  33. }


7、在遍历的时候删除集合中的元素
  1. /**
  2. * 在遍历的时候删除集合中的元素
  3. */
  4. public class Test3 {
  5. public static void main(String[] args) {
  6. ArrayList<String> al = new ArrayList<String>();
  7. al.add("a");
  8. al.add("a");
  9. al.add("a");
  10. al.add("b");
  11. //删除所有的a
  12. for(int i=0; i<al.size(); i++){
  13. String string = al.get(i);
  14. if(string.equals("a")){
  15. al.remove(i--);
  16. }
  17. }
  18. }
  19. }

9、今天必须掌握的内容,面试题,笔试题

1、ArrayList去除集合中字符串的重复值(字符串的内容相同),创建新集合方式
2、ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同),因为contains方法比较对象的equals方法,所以自定义对象要重写equals方法
3、用LinkedList模拟栈结构
4、练习泛型:ArrayList<Student>集合的遍历
5、说说栈和队列的数据结构
6、代码题:练习泛型的使用。定义一个方法swap()传入集合和两个角标使集合中元素交换位置
  1. package com.heima.test;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.heima.bean.Person;
  5. /*
  6. * 1,定义一个方法swap()传入集合和两个角标使集合中元素交换位置
  7. a,定义一个临时变量, 记住其中一个元素
  8. b,用第一个位置存放第二个位置上的元素
  9. c, 用第二个位置存放临时变量记住的元素
  10. */
  11. public class Test1 {
  12. public static void main(String[] args) {
  13. //测试集合中存入字符串
  14. ArrayList<String> al = new ArrayList<>();
  15. al.add("a");
  16. al.add("b");
  17. al.add("c");
  18. al.add("d");
  19. System.out.println(al);
  20. swap(al,0,3);
  21. System.out.println(al);
  22. //测试集合中存入自定义对象
  23. ArrayList<Person> al2 = new ArrayList<>();
  24. al2.add(new Person("zs", 20));
  25. al2.add(new Person("ls", 30));
  26. al2.add(new Person("ww", 10));
  27. al2.add(new Person("zl", 40));
  28. al2.add(new Person("kw", 22));
  29. System.out.println("------------------");
  30. System.out.println(al2);
  31. swap(al2,0,4);
  32. System.out.println(al2);
  33. }
  34. //定义一个带泛型的方法
  35. public static <T> void swap(List<T> list,int index1,int index2) {
  36. //1.获取list集合中索引为index1的值
  37. T t = list.get(index1);
  38. //2.将集合中索引index1位置设置为索引index2的值
  39. list.set(index1, list.get(index2));
  40. //3.将集合index2位置设置为t
  41. list.set(index2, t);
  42. }
  43. }

7、代码题:练习集合中元素的删除和正则。编写一个方法删除集合List<String>中所有包含数字的元素
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import java.util.List;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6. /**
  7. * 编写一个方法删除集合List<String>中所有包含数字的元素
  8. *
  9. * @author haoyongliang
  10. *
  11. */
  12. public class ArrayListTest {
  13. public static void main(String[] args) {
  14. ArrayList<String> list = new ArrayList<>();
  15. list.add("abce0fgh");
  16. list.add("ab2e0fgh");
  17. list.add("a");
  18. list.add("ab3e0fgh");
  19. list.add("ab5e0fgh");
  20. list.add("ab6e0fgh");
  21. list.add("ab5e0f8gh");
  22. list.add("ab5e0f8gh");
  23. delete(list);
  24. System.out.println(list);
  25. }
  26. private static void delete(List<String> list) {
  27. for (int i = 0; i < list.size(); i++) {
  28. String string = list.get(i);
  29. if (string.matches(".*\\d+.*")) {
  30. list.remove(i);
  31. i--;
  32. }
  33. }
  34. }
  35. }

8、向ArrayList中存入一堆学生对象,并且找出年龄最大的那个人
9、集合ArrayList<String>存储了一堆元素,将集合中的所有出现"aa"的元素全部替换成"bb"
10、把集合中的元素反转


Day16_集合第二天的更多相关文章

  1. 关于JDK中的集合总结(二)

    1.2版本的JDK才出现的java集合框架. 下面介绍说一下Vector的一些特点. import java.util.Enumeration; import java.util.Iterator; ...

  2. java集合——进度1

    集合类的由来:    对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定.    就使用集合容器进行存储.    集合特点:1,用于存储对象的容器.2,集合的长度是可变的.3,集合中不可以存 ...

  3. java学习——集合框架(Collection,List,Set)

    集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储. 集合特点:1,用于存储对象的容器.2,集合的长度是可变的.3,集合中不可以存储基本数据类型值. ...

  4. Map集合重要练习

    重要练习:将字符串中的字母按如下格式显示: a(1)b(2)...... 代码及思路如下: /* 获取字符串中字母的次数,并打印出如下格式a(1)b(2)c(3)...... 思路: 先定义一个方法, ...

  5. #Java学习之路——基础阶段二(第二篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  6. Qt编写的开源帖子集合(懒人专用)

    回顾自己学习Qt以来九年了,在这九年多时间里面,从本论坛学习不到不少的东西,今天特意整了一下自己开源过的资源的帖子,整理一起方便大家直接跳转下载,不统计不知道,一统计吓一跳,不知不觉开源了这么多代码, ...

  7. c# 结构体 集合 复习

    添加5个学生的信息到集合中,每个学生都有:学号,姓名,成绩,3个内容,添加完毕后将学生的分数从高到低排列并打印出来,使用结构体 using System; using System.Collectio ...

  8. 【Redis】命令学习笔记——列表(list)+集合(set)+有序集合(sorted set)(17+15+20个超全字典版)

    本篇基于redis 4.0.11版本,学习列表(list)和集合(set)和有序集合(sorted set)相关命令. 列表按照插入顺序排序,可重复,可以添加一个元素到列表的头部(左边)或者尾部(右边 ...

  9. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

随机推荐

  1. WP8没有开发者账号升级GDR3预览版的方法

    很多希望尝鲜WP8 GDR3的朋友一样希望提前体验GDR3的效果,但苦于没有开发者账号而不得其门!今天为大家带来普通账号升级GDR3的方法! 工具/原料 WP8智能手机 可用wifi热点 方法/步骤 ...

  2. Python3基础 in 列表名 判断一个元素是否在列表中

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  3. Bootstrap_导航条

    一.基础导航条 在制作一个基础导航条时,主要分以下几步: 第一步:首先在制作导航的列表(<ul class=”nav”>)基础上添加类名“navbar-nav” 第二步:在列表外部添加一个 ...

  4. GZFramwork快速开发框架演练之会员系统(四)添加商品管理

    1.1:创建表结构 新建三张商品关联的表,表模型如下: 创建SQL语句略 1.2:生成表Model(生成方法见上一节) 1.3:生成tb_ProductType的单结构界面然后添加到项目中 1.4:修 ...

  5. 微信小程序文件结构

    在小程序的跟目录有三个文件 app.js   小程序逻辑   必须有app.json 小程序公共设置  必须有app.wxss 小程序公共样式表  非必须有 小程序的每个页面是一个文件夹 里面包含4种 ...

  6. 【树莓派】树莓派移动网络连接(配置4G网卡)

    1.识别上网卡 使用命令lsusb,如果能够识别则可以继续往下. 2.安装网卡驱动程序 上网卡一般都会带有2个功能,一个是虚拟光驱,用来安装驱动程序:另一个是进行网络连接的modem. 在Linux下 ...

  7. jQuery学习笔记整理

    一.子元素选择器.:nth-child:匹配父元素下的第N个子或者奇偶元素.注意:序号是从1开始的,而eq是从0开始计数的!它匹配的是前方选择器选择到的元素的父元素下面的第几个元素.例如:ul li: ...

  8. [java基础]循环结构1

    [java基础]循环结构1 循环结构:for循环,while循环,do_while循环在,增强型for循环 /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:WhileTest.j ...

  9. zabbix3.0.4 部署之三 (LNMP > Mysql 安装)

    MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具. 因此,我们首先要在系统中源码编译安装cmake工具. 接下来的安装过程中会遇到错误,我们 ...

  10. Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸

    一.引言 Android的开源使厂商无需自行研发OS,大大降低了研发.生产的成本,使得Android平板品牌如雨后春笋般爆发,山寨机厂商们似乎又找到了一丝希望.与此同时带来的是广大开发者的苦不堪言,各 ...