Java基础--第十六天

Collection----构造方法【子类】----方法----All区分开---Iterator---ListIterator

Java集合

集合

长度可变;

只能存储对象;

与数组区别:

数组长度固定,可存储基本类型,数据类型一致

长度可变,只能存储对象(引用),存储不同类型对象

集合使用过程:

A:创建集合对象;

B:创建集合中要添加的元素;

C:将元素添加到集合中;

D:遍历集合。【遍历】

集合体系结构:

学习顶层内容;应用最底层的内容

Collection【层次结构】

List

ArrayList

Vector

LinkedList

Set

HashSet

TreeSet

Collection中有的功能:

A:添加功能

boolean add(Object obj):向集合中添加一个元素

boolean addAll(Collection c):向集合中添加一个集合的元素。

B:删除功能

void clear():删除集合中的所有元素。

boolean remove(Object obj):从集合中删除指定的元素

boolean removeAll(Collection c):从集合中删除一个指定的集合元素。

C:判断功能

boolean isEmpty():判断集合是否为空。

boolean contains(Object obj):判断集合中是否存在指定的元素。

boolean containsAll(Collection c):判断集合中是否存在指定的一个合中的元素。

D:遍历功能

Iterator iterator():就是用来获取集合中每一个元素。

E:长度功能

int size():获取集合中的元素个数

F:交集功能

boolean retainAll(Collection c):判断两个集合中是否有相同的素。

G:把集合转换成数组

Object[] toArray():把集合变成数组。

把带all的分开

【遍历】

Iterator

迭代器原理---指针

Iterator使用步骤:

A:创建集合对象;

B:创建元素对象;

C:把元素对象添加到集合对象中;

D:遍历集合对象

a:通过集合对象获取迭代器对象;

b:通过迭代器对象获取hasNext()进行判断;

c:通过迭代器对象next()进行获取

List特点:

元素有序可重复

列表迭代器  ListIterator

并发修改异常【ConcurrentModificationException】

API升级:

更安全;简化代码;优化升级。

1:集合

(1)java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储。

而对多个元素进行存储,前面我们学习过数组,数组的弊端,长度固定。这样,数组将不能

满足变化的要求。所以,java就提供了集合供我们使用。

(2)集合的特点:

1、长度可以发生改变

2、只能存储对象

3、可以存储多种类型对象(一般存储的还是同一种)

(3)集合和数组的区别

1、长度问题

数组固定

集合可变

2、存储元素问题

数组可以是基本类型,也可以是引用类型。

集合只能是引用类型。

3、是否同一类型

数组元素类型一致。

集合元素类型可以不一致。

(4)集合体系的由来

集合是存储多个元素的容器,但是,由于数据结构不同,java就提供了多种集合类。

而这多种集合类有共性的功能,所以,通过不断的向上抽取,最终形成了集合体系

结构。

数据结构:数据存储的方式。

程序 = 算法 + 数据结构

Collection

|--List

|--ArrayList

|--Vector

|--LinkedList

|--Set

|--HashSet

|--TreeSet

(5)如何学习和使用一个继承体系呢?

学习顶层:因为顶层定义的是共性内容。

使用底层:因为底层才是具体的实现。

2:Collection的功能

(1)Collection的功能

1、添加功能

boolean add(Object obj):向集合中添加一个元素。

boolean addAll(Collection c):向集合中添加一个集合的元素。

2、删除功能

void clear():删除集合中所有的元素。

boolean remove(Object obj):删除集合中指定的元素。

boolean removeAll(Collection c):删除集合中指定的集合元素。

3、判断功能

boolean isEmpty():判断集合是否为空。

boolean contains(Object obj):判断集合是否包含指定的元素。

boolean containsAll(Collection c):判断集合是否包含指定的集合中的元素。

4、遍历功能

Iterator iterator():迭代器。

hasNext():判断是否还有元素

next():获取下一个元素

5、长度功能

int size():获得集合的元素个数。

6、交集功能

boolean retainAll(Collection c):判断集合中是否有相同的元素。

7、转换功能

Object[] toArray():把集合变成数组。

(2)迭代器的使用

1、使用步骤

1、通过集合对象获取迭代器对象。

2、通过迭代器对象判断。

3、通过迭代器对象获取。

2、迭代器原理

由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。

这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种

集合的时候,只要该集合内部实现这个接口即可。

3、迭代器源码

public interface Iterator

{

public abstract boolean hasNext();

public abstract Object next();

}

public interface Collection

{

public abstract Iterator iterator();

}

public interface List extends Collection

{

...

}

public class ArrayList implements List

{

public Iterator iterator()

{

return new Itr();

}

private class Itr implements Iterator

{

public boolean hasNext(){...}

public Object next(){...}

}

}

(3)集合的常见使用步骤:

1、创建集合对象

2、创建元素对象

3、把元素添加到集合中

4、遍历集合

1、通过集合对象获取迭代器对象。

2、通过迭代器对象判断。

3、通过迭代器对象获取。

(4)Collection存储字符串和自定义对象并遍历。

1、存储字符串

Collection c = new ArrayList();

//String s = "hello";

//c.add(s);

c.add("hello");

c.add("world");

c.add("java");

Iterator it = c.iterator();

while(it.hasNext())

{

String s = (String)it.next();

System.out.println(s);

}

2、存储自定义对象

Collection c=new ArrayList();

Student s1=new Student("林青霞",26);

c.add("s1");

Iterator it=c.iterator();

while(it.hasNext())

{

String s=(String)it.next();

System.out.println(s);

}

3:List的特有功能

(1)List的特有功能

1、添加功能

void add(int index,Object obj): 指定位置添加元素

2、删除功能

Object remove(int index): 指定位置删除元素

3、修改功能

Object set(int index,Object obj): 指定位置替换

4、获取功能

Object get(int index): 获取指定位置元素

int indexOf(Object obj): 获取指定元素的索引

ListIterator listIterator():参数列表

(2)List的遍历方式

1、Iterator迭代器

2、ListIterator迭代器

3、普通for+get()

(3)ListIterator迭代器

是Iterator的子接口。

(4)面试题:并发修改异常

1、并发修改异常的产生原因

用迭代器遍历集合,用集合去操作集合。

2、解决方案:

1、使用集合操作。

2、使用列表迭代器操作。

(5)List集合存储字符串和自定义对象并遍历。

1、存储字符串

2、存储自定义对象

(6)List特点:

1. 有序(存储和取出的顺序一致)

2. 可以重复

3. 可以通过索引值操作对应位置的元素

时间: 2024-10-07 04:17:32

Java基础--第十六天的相关文章

Java基础--第二十六天

正则表达式的规则字符: A:字符 x 字符 x,任意字符代表自己本身. \\ 反斜线字符 \r      回车 \n     换行 B:字符类 [abc] a.b 或 c,任意字符一次. [^abc] 任何字符,除了 a.b 或 c [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内 [0-9] 任意的数字字符一次 C:预定义字符类 . 任意的字符 \d 数字:[0-9] \w 单词字符:[a-zA-Z_0-9] 单词字符:英文,数字,及_ D:边界匹配器 ^ 行的开头 $ 行的结

大数据Java基础第十六天、第十七天作业

使用Socket编写类似QQ通讯工具,显示屏幕的历史聊天记录待优化. import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; import java.awt.event

Java基础第十六天总结

String.getByte("charset");//对字符串编码 new String(,bytes,"charset");//解码 使用JDK提供的bin/native2ascii工具实现中文转码 --------------------------------------------------- 创建文本文件(gbk编码,推荐使用记事本) 1.txt 你abc好,中国! 2.通过cmdnative2ascii -encoding gb2312 1.txt

java基础第十六天_GUI/socket

参照视频,编写出聊天程序. 知识点分析: Socket + GUI  + IO =  简版QQ ------------------------------ 1.GUI 2.Socket ServerSocket : port + accept Socket sock  = accept(); //更新窗口 //接收client的数据 new Thread(){ run(){ sock..getInputStream(); .... //更新窗口 } }.start() 3.在分线程中完成Ser

Java基础--第二十五天

TCP协议: Socket类 构造方法: TCP程序,必须先开服务器端 成员方法 服务器端程序: 创建服务器端Socket对象: 监听连接: 获取输入流,并显示: 释放资源 ServerSocket类 网络编程 网络编程+反馈 大融合[所有的Java基础融合为一个实例] 正则表达式: 符合某种规则的字符串,常用于校验 规则: Pattern类 A:字符 x:任意字符表示任意字符本身 \\:反斜线字符[转义字符] \r:回车 \n:换行 B:字符类 [abc]:表示a,b,c任意字符一次 [^ab

大数据Java基础第十五天、第十六天作业

使用Socket编写类似QQ通讯工具,显示屏幕的历史聊天记录待优化. import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; import java.awt.event

java基础知识十二

第十二章 异常 异常(Exception):又称为例外,是程序在运行过程中发生的非正常事件,其发生会影响程序的正常执行.Exception是程序级错误,可由程序本身处理:Error是系统级错误,程序可不用处理.Java异常类都必须继承Throwable类或其子类.用户通过继承自定义异常.常见异常:除数为零.负数开方.数组越界.I/O异常. 抛出的异常由catch捕获,未被捕获的异常逐层传播直到main.如果main也没有处理该异常,则操作系统会终止main执行. 处理异常时,也可以抛出新异常,也

大数据JAVA基础第十天

1.继承extends(也叫扩展) 引入 首先写两个类: //定义学生类 class Student { //成员变量 private String name; private int age; //空构造 public Student(){} //getXxx()/setXxx() public void eat() { System.out.println("吃饭"); } } //定义教师类 class Teacher { //成员变量 private String name;

包、修饰符、内部类、匿名内部类(java基础知识十)

1.package关键字的概述及作用 * A:为什么要有包     * 将字节码(.class)进行分类存放  * B:包的概述     *   * C:包的作用     * 包名要定义在第一行,     * 包名.*这个包下所有的类都可见     * 具体的类比较好,能提高效率 2.包的定义及注意事项 * A:定义包的格式 * package 包名; * 多级包用.分开即可* B:定义包的注意事项 * A:package语句必须是程序的第一条可执行的代码 * B:package语句在一个jav