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. linux下几个常用软件

    Ubuntu 软件包地址 https://packages.ubuntu.com/ 一. 字体 不管是雅黑还是宋体,从windows cp过来后, 直接双击打开并安装 二. Meld 可视的diff和 ...

  2. javascript 和 下拉列表

    <form id="f"> <select size="1" name="s"> <option value= ...

  3. GB/T19001—2008质量管理体系要求、标准、贯标(贯彻标准)

    应知应会知识 GB/T19001—2008质量管理体系要求.标准.贯标(贯彻标准)   一.质量管理体系的八项管理原则是什么? 1.以顾客为关注焦点 2.领导作用 3.全员参与 4.过程方法 5.管理 ...

  4. Python_shelve模块

    shelve:对象持久化的保存的模块,将对象保存到文件里  (默认的数据存储文件为二进制),可持久化任何pickle可支持的Python数据格式 shelve 中唯一的方法: shelve.open( ...

  5. Python_datetime模块

    datetime模块重新封装了time模块,提供更多的接口,提供的类有: date,表示日期的类 time,表示时间的类 datetime,表示日期和时间的类 timedelta,表示时间间隔,即两个 ...

  6. activemq 控制面板里Number Of Pending Messages、 Messages Enqueued等含义解释

    项目中在API登录接口采用了ActiveMQ消息队列中间件,采用三台MQ做集群

  7. 远程连接mongodb服务器

  8. Codeforces 1101F Trucks and Cities dp (看题解)

    Trucks and Cities 一个很显然的做法就是二分然后对于每个车贪心取check, 这肯定会TLE, 感觉会给人一种贪心去写的误导... 感觉有这个误导之后很难往dp那个方向靠.. dp[ ...

  9. vue 中如何对公共css、 js 方法进行单文件统一管理,全局调用

    1.前言 最近,为公司开发交付的一个后台管理系统项目,我使用了 Vue 框架进行开发实践. 模块化.组件化.工程化的开发体验非常好.良好的 api,优雅的设计,对于工程师非常友好. 但是由于模块比较多 ...

  10. linux中通过lsof恢复删除的文件,前题是fd被占用。

    http://www.serverwatch.com/tutorials/article.php/3822816/Recovering-Deleted-Files-With-lsof.htm One ...