Day16_集合第二天
1、LinkedList类(掌握)
1、特点
底层数据结构是链表,查询慢,增删快线程不安全,效率高。
|
LinkedList 成员方法
|
|
|
void addFirst(Object o)
|
添加
|
|
void addLast(Object o)
|
|
|
Objcet getFirst()
|
获取
|
|
Object getLast()
|
|
|
Object removeFirst()
|
删除
|
|
Object removeLast()
|
|
2、栈和队列数据结构(掌握)
3、泛型(能看懂什么是泛型的声明,什么是泛型的使用即可)
1、概述
/**在类上定义一个泛型*/class Person1<T> {}/**在类上定义两个泛型*/class Person2<T,S>{}/**在类上定义两个泛型,且第二个类型S必须F或者F的子类*/class Person3<F, S extends F>{}
/**在方法上声明一个泛型*/public <T> void show(T t){}/**在方法上声明两个泛型*/public <T,S> void show(T t, S s){}/**在方法上声明两个泛型,切第二个类型S必须是F或者F的子类*/public <F,S extends F> void show(){}
interface English<T> {void speakEnglish();}/**** 问题:可以调用以下String中的substring方法吗* 第一个<String>是声明一个泛型,名字叫String* 第二个<String>是使用刚才声明好的泛型* 所以这两个String与java.lang包下的String没有任何关系*/class Person<String> implements English<String>{@Overridepublic void speakEnglish() {}}
4、静态导入(了解)
import static java.util.Arrays.sort; //静态导入public class Demo2_StaticImport {public static void main(String[] args) {int[] arr = {55,22,33,44,11};sort(arr);}}
5、增强for循环(掌握)
1、格式
6、可变参数(掌握)
package com.heima.jdk5;public class Demo3_ChangeableArgs {public static void main(String[] args) {print(11,22,33,44,55);}public static void print(int ... arr) { //可变参数其实是一个数组for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}}
7、案例(掌握)
8、案例代码(掌握)
package com.heima.list;import java.util.ArrayList;import java.util.Iterator;@SuppressWarnings({ "rawtypes", "unchecked" })public class Demo1_ArrayList {/*** * A:案例演示* 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)* 思路:创建新集合方式*/public static void main(String[] args) {ArrayList list = new ArrayList();list.add("a");list.add("a");list.add("b");list.add("b");list.add("c");list.add("c");list.add("c");list.add("c");ArrayList newList = getSingle(list);System.out.println(newList);}/** 创建新集合将重复元素去掉* 1,明确返回值类型,返回ArrayList* 2,明确参数列表ArrayList** 分析:* 1,创建新集合* 2,根据传入的集合(老集合)获取迭代器* 3,遍历老集合* 4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加*/public static ArrayList getSingle(ArrayList list) {ArrayList newList = new ArrayList<>(); //1,创建新集合Iterator it = list.iterator(); //2,根据传入的集合(老集合)获取迭代器while(it.hasNext()) { //3,遍历老集合Object obj = it.next(); //记录住每一个元素if(!newList.contains(obj)) { //如果新集合中不包含老集合中的元素newList.add(obj); //将该元素添加}}return newList;}}
package com.heima.list;import java.util.ArrayList;import java.util.Iterator;import com.heima.bean.Person;@SuppressWarnings({ "rawtypes", "unchecked" })public class Demo2_ArrayList {/*** * A:案例演示* 需求:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)* B:注意事项* 重写equals()方法的contains方法判断是否包含,底层依赖的是equals方法remove方法判断是否删除,底层依赖的是equals方法*/public static void main(String[] args) {ArrayList list = new ArrayList(); //创建集合对象list.add(new Person("张三", 23));list.add(new Person("张三", 23));list.add(new Person("李四", 24));list.add(new Person("李四", 24));list.add(new Person("李四", 24));list.add(new Person("李四", 24));//ArrayList newList = getSingle(list); //调用方法去除重复//System.out.println(newList);list.remove(new Person("张三", 23));System.out.println(list);}/** 创建新集合将重复元素去掉* 1,明确返回值类型,返回ArrayList* 2,明确参数列表ArrayList** 分析:* 1,创建新集合* 2,根据传入的集合(老集合)获取迭代器* 3,遍历老集合* 4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加*/public static ArrayList getSingle(ArrayList list) {ArrayList newList = new ArrayList<>(); //1,创建新集合Iterator it = list.iterator(); //2,根据传入的集合(老集合)获取迭代器while(it.hasNext()) { //3,遍历老集合Object obj = it.next(); //记录住每一个元素if(!newList.contains(obj)) { //如果新集合中不包含老集合中的元素newList.add(obj); //将该元素添加}}return newList;}}
package com.heima.list;import java.util.LinkedList;public class Stack {private LinkedList list = new LinkedList();/** 模拟进栈方法*/public void in(Object obj) {list.addLast(obj);}/** 模拟出栈*/public Object out() {return list.removeLast();}/** 模拟栈结构是否为空*/public boolean isEmpty() {return list.isEmpty();}}
package com.heima.generic;import java.util.ArrayList;import java.util.Iterator;import com.heima.bean.Person;public class Demo2_Generic {/*** * A:案例演示* ArrayList存储字符串并遍历泛型版*/public static void main(String[] args) {//demo1();ArrayList<Person> list = new ArrayList<>();list.add(new Person("张三", 23));list.add(new Person("李四", 24));list.add(new Person("王五", 25));list.add(new Person("赵六", 26));Iterator<Person> it = list.iterator();while(it.hasNext()) {Person p = it.next(); //将集合中的每一个元素用Person记录System.out.println(p.getName() + "..." + p.getAge());}}public static void demo1() {ArrayList<String> list = new ArrayList<>(); //创建集合对象list.add("a");list.add("b");list.add("c");list.add("d");Iterator<String> it = list.iterator();while(it.hasNext()) {System.out.println(it.next());}}}
package com.heima.jdk5;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Demo4_AsList {/*** 数组转换成集合* 数组转换成集合虽然不能增加或减少元素,但是可以用集合的思想操作数组,也就是说可以使用其他集合中的方法*/public static void main(String[] args) {//demo1();//demo2();//集合转数组,加泛型的ArrayList<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");String[] arr = list.toArray(new String[10]); //当集合转换数组时,数组长度如果是小于等于集合的size时,转换后的数组长度等于集合的size//如果数组的长度大于了size,分配的数组长度就和你指定的长度一样for (String string : arr) {System.out.println(string);}}public static void demo2() {//int[] arr = {11,22,33,44,55};//List<int[]> list = Arrays.asList(arr); 基本数据类型的数组转换成集合,会将整个数组当作一个对象转换//System.out.println(list);Integer[] arr = {11,22,33,44,55}; //将数组转换成集合,数组必须是引用数据类型List<Integer> list = Arrays.asList(arr);System.out.println(list);}public static void demo1() {String[] arr = {"a","b","c"};List<String> list = Arrays.asList(arr); //将数组转换成集合//list.add("d"); //不能添加System.out.println(list);}}
package com.heima.list;import java.util.ArrayList;import com.heima.bean.Person;public class Demo5_ArrayListArrayList {/*** * A:案例演示* 集合嵌套之ArrayList嵌套ArrayList* 案例:* 我们学科,学科又分为若个班级* 整个学科一个大集合* 若干个班级分为每一个小集合*/public static void main(String[] args) {ArrayList<ArrayList<Person>> list = new ArrayList<>();ArrayList<Person> first = new ArrayList<>(); //创建第一个班级first.add(new Person("杨幂", 30));first.add(new Person("李冰冰", 33));first.add(new Person("范冰冰", 20));ArrayList<Person> second = new ArrayList<>();second.add(new Person("黄晓明", 31));second.add(new Person("赵薇", 33));second.add(new Person("陈坤", 32));//将班级添加到学科集合中list.add(first);list.add(second);//遍历学科集合for(ArrayList<Person> a : list) {for(Person p : a) {System.out.println(p);}}}}
/*** 在遍历的时候删除集合中的元素*/public class Test3 {public static void main(String[] args) {ArrayList<String> al = new ArrayList<String>();al.add("a");al.add("a");al.add("a");al.add("b");//删除所有的afor(int i=0; i<al.size(); i++){String string = al.get(i);if(string.equals("a")){al.remove(i--);}}}}
9、今天必须掌握的内容,面试题,笔试题
package com.heima.test;import java.util.ArrayList;import java.util.List;import com.heima.bean.Person;/** 1,定义一个方法swap()传入集合和两个角标使集合中元素交换位置a,定义一个临时变量, 记住其中一个元素b,用第一个位置存放第二个位置上的元素c, 用第二个位置存放临时变量记住的元素*/public class Test1 {public static void main(String[] args) {//测试集合中存入字符串ArrayList<String> al = new ArrayList<>();al.add("a");al.add("b");al.add("c");al.add("d");System.out.println(al);swap(al,0,3);System.out.println(al);//测试集合中存入自定义对象ArrayList<Person> al2 = new ArrayList<>();al2.add(new Person("zs", 20));al2.add(new Person("ls", 30));al2.add(new Person("ww", 10));al2.add(new Person("zl", 40));al2.add(new Person("kw", 22));System.out.println("------------------");System.out.println(al2);swap(al2,0,4);System.out.println(al2);}//定义一个带泛型的方法public static <T> void swap(List<T> list,int index1,int index2) {//1.获取list集合中索引为index1的值T t = list.get(index1);//2.将集合中索引index1位置设置为索引index2的值list.set(index1, list.get(index2));//3.将集合index2位置设置为tlist.set(index2, t);}}
import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** 编写一个方法删除集合List<String>中所有包含数字的元素** @author haoyongliang**/public class ArrayListTest {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("abce0fgh");list.add("ab2e0fgh");list.add("a");list.add("ab3e0fgh");list.add("ab5e0fgh");list.add("ab6e0fgh");list.add("ab5e0f8gh");list.add("ab5e0f8gh");delete(list);System.out.println(list);}private static void delete(List<String> list) {for (int i = 0; i < list.size(); i++) {String string = list.get(i);if (string.matches(".*\\d+.*")) {list.remove(i);i--;}}}}
Day16_集合第二天的更多相关文章
- 关于JDK中的集合总结(二)
1.2版本的JDK才出现的java集合框架. 下面介绍说一下Vector的一些特点. import java.util.Enumeration; import java.util.Iterator; ...
- java集合——进度1
集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定. 就使用集合容器进行存储. 集合特点:1,用于存储对象的容器.2,集合的长度是可变的.3,集合中不可以存 ...
- java学习——集合框架(Collection,List,Set)
集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储. 集合特点:1,用于存储对象的容器.2,集合的长度是可变的.3,集合中不可以存储基本数据类型值. ...
- Map集合重要练习
重要练习:将字符串中的字母按如下格式显示: a(1)b(2)...... 代码及思路如下: /* 获取字符串中字母的次数,并打印出如下格式a(1)b(2)c(3)...... 思路: 先定义一个方法, ...
- #Java学习之路——基础阶段二(第二篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- Qt编写的开源帖子集合(懒人专用)
回顾自己学习Qt以来九年了,在这九年多时间里面,从本论坛学习不到不少的东西,今天特意整了一下自己开源过的资源的帖子,整理一起方便大家直接跳转下载,不统计不知道,一统计吓一跳,不知不觉开源了这么多代码, ...
- c# 结构体 集合 复习
添加5个学生的信息到集合中,每个学生都有:学号,姓名,成绩,3个内容,添加完毕后将学生的分数从高到低排列并打印出来,使用结构体 using System; using System.Collectio ...
- 【Redis】命令学习笔记——列表(list)+集合(set)+有序集合(sorted set)(17+15+20个超全字典版)
本篇基于redis 4.0.11版本,学习列表(list)和集合(set)和有序集合(sorted set)相关命令. 列表按照插入顺序排序,可重复,可以添加一个元素到列表的头部(左边)或者尾部(右边 ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
随机推荐
- linux文件上传,给文件或目录添加apache权限
系统环境:ubuntu11.10/apache2/php5.3.6 在LAMP环境中,测试一个简单的php文件上传功能时,发现/var/log/apache2/error.log中出现如下php警告: ...
- Maven学习(三) -- 仓库
标签(空格分隔): 学习笔记 坐标和依赖时任何一个构件在Maven世界中的逻辑表示方式:而构件的物理表示方式是文件,Maven通过仓库来同意管理这些文件. 任何一个构件都有其唯一的坐标,根据这个坐标可 ...
- MyBatis简介
- 解决:“java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut myMethod”问题!
Spring版本:2.5.6 AspectJ是Spring自带的lib. Jdk版本:1.7.0_17 在配置没问题的情况下,报:java.lang.IllegalArgumentException: ...
- javascript数组常用方法汇总
1.join()方法: Array.join()方法将数组中所以元素都转化为字符串链接在一起,返回最后生成的字符串.也可以指定可选的字符串在生成的字符串中来分隔数组的各个元素.如果不指定分隔符,默认使 ...
- python 安装模块步骤
1.下载 pyocr-0.4.1.tar.gz tar.gz文件 解压 放到 c:/python27 文件夹下面 C:\Python27\pyocr-0.4.1 直接 cmd 命令 进入 ...
- I/O多路复用 SELECT POLL -- 内核实现
等待队列 先补充个基础知识――等待队列 认识 定义 wait_queue_head_t wait_queue; 初始化 init_waitqueue_head(&wait_queue); 等待 ...
- ModalPopup
原文地址:http://ajax.asp.net/ajaxtoolkit/ModalPopup/ModalPopup.aspx ModalPopup 描述 ModalPopup 能够使页面以设计对话框 ...
- HashSet其实就那么一回事儿之源码浅析
上篇文章<HashMap其实就那么一回事儿之源码浅析>介绍了hashMap, 本次将带大家看看HashSet, HashSet其实就是基于HashMap实现, 因此,熟悉了HashMap ...
- python语言的优点和缺点
python作为一门高级编程语言,它的诞生虽然很偶然,但是它得到程序员的喜爱却是必然之路. 龟叔给Python的定位是"优雅"."明确"."简单&qu ...