JAVA自学笔记15

@例题1:共有5个学生,请把五个学生的信息存储到数组中,并遍历数组,并获取每个学生的信息

Students[] students=new Student[5];
Student s1=new Student("Jack");
Students[0]=s1;//数组里储存的是一个一个的对象

1、集合类

1)面向对象语言对事物都是以对象的形式,所以为了方便 对多个对象进行操作,java提供了集合类

2)数组虽然也可以存储对象,但长度必须是固定的,集合的长度是可变的。数组中可以存储基本数据类型,集合只能存储对象

3)集合类的特点:只用于存储对象,长度可变,可以存储不同类型的对象

4)集合的继承体系图解:

2、接口Collection

1)Collection层次结构中的根接口。Collection表示一组对象,它们也被称为collection的元素

2)功能:

①添加:

boolean add(Object obj)

boolean addAll(Collection c)//添加一个集合的元素

②删除:

void clear();//移除集合中所有元素

boolean remove(Object o)//移除一个元素

boolean removeAll(Collection c)//移除一个集合的元素

③判断:

boolean contain(Object obj);//判断集合中是否包含指定的元素

boolean containAll(Collection c);//判断集合中是否包含指定的集合元素

boolean isEmpty();//判断集合的数据元素是否为空

④获取:

Iteractor iterartor();//返回在此collection中的所有元素

⑤交集:

boolean retainAll(collection c);两个集合都有的元素

⑥长度:

int size();//元素的个数

数组、集合均无length方法,字符串有length方法

⑦转换

Object[] toArray();//返回包含此collection中所有元素的数组

T[] toArray();//返回包含此collection中所有元素的数组,返回数组的运行时类型与指定数组的运行时类型相同

//使用子类对象ArrayList
Collection c=new ArrayList();
System.out.println("C:"+c);//已重写,输出为[] System.out.println(c.add("hello"));//true,以下省略输出语句
c.remove("hello")//true,若对象中没有需要删除的元素,则返回false
c.retain("hello")//false
c.isEmpty()//true
c.size;//0 Collection c1=new ArrayList();
c1.add("abc1");
c1.add("abc2");
Collection c2=new ArrayList();
c2.add("abc3");
c2.add("abc4");
c2.add("abc2"); c1.addAll(c2);//true,[abc1,abc2,abc2,abc3,abc4]
c1.remove(c2);//只要有一个元素被移除了,就返回true,134
c1.containsAll(c2);//只有包含c2中的所有元素才返回true
c1.retainAll(c2);//true,c1存储两者交集,c2不变。返回值表示的是c1是否发生过改变

2)集合的遍历

Collection c=new ArrayList();
c1.add("abc1");
c1.add("abc2");
Object[] objs=c.toArray();//即可遍历
for(int x=0;x<objs.length;x++){
System.out.println(objs[x]);
String s=(String) objs[x];//向下转型以调用String类下的方法
System.out.println(s.length);//输出每个元素的长度
} //迭代器遍历(集合的专用遍历方式)
Collection c=new ArrayList();
c1.add("abc1");
c1.add("abc2"); Iterator it=c.iterator();//将返回子类对象,多态
while(it.hasNext()){//判断是否有下一个元素
String s=(String)it.next()//返回abc1,获取元素并移动到下一个位置
System.out.println(s);
}

//例题2:用集合存储5个学生对象,并利用迭代器进行遍历

注意:自己的类名不要和API当中当前使用的类名相同

Collection c=new ArrayList(); 

//创建学生对象
String s1=new Student("Jack","33");
String s2=new Student("cici","23");
c.add(s1);
c.add(s2);
Iterator it=c.iterator();//将返回子类对象,多态
while(it.hasNext()){//判断是否有下一个元素
String s=(String)it.next()//返回abc1,获取元素并移动到下一个位置
System.out.println(s);//注意:每调用一次next就移动一次
}

3)迭代器:

①是遍历集合的一种方式,是依赖于集合而存在的

图解:

@例题List存储字符串并遍历

//创建集合对:
List list=new ArrayList();
//创建字符串并添加
c1.add("abc1");
c1.add("abc2"); Interator it=list.iterator();
while(it.hasNext()){
String s=(String)it.next();
}

2、List集合

1)有序的collection序列。此接口的用户可以对列表中每一个元素的插入位置进行精确的控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与set不同,列表通常允许重复的元素

3、增强for

1)for循环的一种,JDK新特性,用于简化数组和Collection集合的遍历,用于迭代器

2)格式:

for(元素数据类型 变量名:数组或者Collection集合){

//使用变量即可,该变量就是元素

}

3)弊端:增强for的目标不能为空,需要先进行判断

int[] arr={1,2,3,4,5};
for(int x:arr)
{System.out.println(x);} String[] StrArray={"dd","ee","ff "};
for(String s:strArray){
System.out.println(s);
} ArrayList<String>array=new ArrayList<String>;
array.add("HELLO");
array.add("ww");
array.add("ed");
for(String s:array){
System.out.println(s);
}
//存储自定义对象并遍历
//创建对象
Student s("aa",33);
Student s1("bb",3);
Student s2("cc",55); //添加到集合中
array.add(s);
array.add(s1);
array.add(s2); //迭代器
Iterator<Student> it=array.iterator();
while(it.hasNext()){
Student s=it.next(); } //普通for
for(int x=0lx<array.size();x++){
Student s=array.get(x);
System.out,println(s.getName());
} for(Student s:array){
System.out,println(s.getName);
}
//LinkedList/Vector/Collection/List请类比

3、静态导入

1)格式:import static 包名…类名。方法名;

import static java.lang.Math.abs;
import static java.lang.Math.max; abs(-2);
max(2,3);

2)可以直接导入到方法的级别

方法必须是静态的,若有多个同名的静态方法,必须加前缀。但一般没什么用处

4可变参数

1)定义方法时不知道要定义多少个参数,java提供了可变参数

2)格式:

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

public static int sum(int...a){
int s=0;
for(int x:a){
s+=x;
}
return s;
}

注意:这里的变量是一个数组,如果一个方法有多个可变参数,且有多个参数。那么,可变参数肯定是最后一个

选中表达式-右键-refactor-extract method

3)Arrays工具类中的一个方法:

asList方法

public staticListasList(T…a)//把数组转换为集合,虽然可以把数组转为集合,但数组的长度不能改变

//字符串转换为数组
String strArray={"d","dd","ddd"}; List<String> list=Arrays.asList(strArray);
for(String s:list){
System.out.println(s);
} List<String> list=Arrays.asList("d","dd","ddd");
for(String s:list){
System.out.println(s);d dd ddd
}
//

@例题5:集合嵌套存储与遍历


//创造大集合
ArrayList<<ArrayList<Student>>> bigArrayList=new ArrayList<<ArrayList<Student>>(); //创建第一个集合
ArrayList<Student>firstList=new ArrayList<Student>();
Student s1=new Student("jenny",23);
Student s2=new Student("jack",73); //添加到对象中
firstList.add(s1);
firstList.add(s2); //把第一个班级存到大集合中
bigArrayList.add(firstList)
//其余类比 //遍历各个元素:
for(ArrayList<Student>array):bigArrayList{
for(Student s:array){
System.out.println(s.getname)
}
}

@例题7:

获取10个1-20之间的随机数,要求不能重复

//创建产生随机数的对象
//创建应存储随机数的集合
//定义一个统计变量从0开始
//判断统计变量是否小于10。是则产生一个随机数,判断该随机数在集合中是否存在,若不存在就继续添加,如果存在则跳过。如果已满10个,则跳过
//遍历集合 Random r=new Random(); ArrayList<integer>array=new ArrayList<Integer>(); int count=0;
whie(count<10){
int number=r,nextInt(20)+1;
if(array.contains(number)!){
array.add(number);
count++; for(Integer i:array){
System,out,println(i);
}
}
}

@例题8:键盘录入多个数据输出最大值

//创建键盘录入对象
Scanner sc=new Scanner(Sytem.in);
//键盘录入多个数据,以0未结束
ArrayList<Integer>array=new ArrayList<Integer>();
while(true){
if(number!=0){
array.add(number);
}else break;
}
//把集合转为数组
Integer[] i=new Inteher(array.size);
Integer[] ii=array.toArray(i); //对数组排序
Array,sort(i); //获取该数组中最大索引的值
System.out.println(i[i.lenngth-1]);

JAVA自学笔记15的更多相关文章

  1. JAVA自学笔记11

    JAVA自学笔记11 1:Eclipse的安装 2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字 A:创建项目 B:在src目录下创建包.cn.itcast C:在cn.i ...

  2. JAVA自学笔记14

    JAVA自学笔记14 1.正则表达式 1)是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.其实就是一种规则.有自己的特殊应用 2)组成规则: 规则字符在java.util.rege ...

  3. JAVA自学笔记18

    JAVA自学笔记18 1.Map接口: 1)功能: 2) Map<String,String>m=new HashMap<String,String>(); //添加元素,元素 ...

  4. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  5. JAVA自学笔记09

    JAVA自学笔记09 1.子类的方法会把父类的同名方法覆盖(重写) 2.final: 1)可修饰类.方法.变量 2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承 3)修饰方法时:该方法将无法 ...

  6. JAVA自学笔记05

    JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...

  7. JAVA自学笔记06

    JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...

  8. JAVA自学笔记04

    JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...

  9. JAVA自学笔记07

    JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...

随机推荐

  1. T4模版自动生成MSSQL实体类

    在Model层建立ModelAuto.ttinclude文件 <#@ assembly name="System.Core"#> <#@ assembly nam ...

  2. 【转载】Python and Mysql Andy Dustman

    0. http://mysql-python.sourceforge.net/ Python and MySQL: This is a presentation I did a couple year ...

  3. Python_面向对象_类2

    类的几个装饰器方法: @classmethod (类方法):使之无法访问实例变量 class Animal(object): def __init__(self, name): self.name = ...

  4. zabbix分布式监控的部署与win被控端

    zabbix是一个分布式监视,管理系统,基于server-clinet架构,可用于监视各种网络服务,服务器和网络机器等状态. server端基于C语言,web管理端Frontend则是基于PHPA制作 ...

  5. BZOJ2480 Spoj3105 Mod 数论 扩展BSGS

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2480.html 题目传送门 - BZOJ2480 题意 已知数 $a,p,b$ ,求满足 $a^x≡b ...

  6. gevent实现生产者消费者

    from gevent import monkey;monkey.patch_all()from gevent.queue import Queue #队列 gevent中的队列import geve ...

  7. thinkphp5 model 模型

    新增更新都是save.saveAll  怎么识别他们 实例化模型后调用save方法表示新增: 查询数据后调用save方法表示更新: save方法传入更新条件后表示更新: isUpdate(true): ...

  8. linux的文件打包与压缩

    简介 Linux 上常用的压缩/解压工具,介绍了zip.rar.tar的使用. 文件打包和压缩 Linux 上的压缩包文件格式,除了 Windows 最常见的*.zip.*.rar..7z 后缀的压缩 ...

  9. debian9 开启rc.local服务

    由于某些软件并没有增加开启启动的服务,很多时候需要手工添加,一般我们都是推荐添加命令到 /etc/rc.local 文件,但是 Debian 9 默认不带 /etc/rc.local 文件,而 rc. ...

  10. AngularJS的Scope和Digest

    Angular是一个成熟和强大的JavaScript框架.它也是一个比较庞大的框架,在熟练掌握之前,需要领会它提出的很多新概念.很多Web开发人员涌向Angular,有不少人面临同样的障碍.Diges ...