黑马程序员技术交流社区

标题: 【石家庄校区】java语言学习阶段总结—07 [打印本页]

作者: 君临城下    时间: 2018-1-4 21:27
标题: 【石家庄校区】java语言学习阶段总结—07
本帖最后由 小石姐姐 于 2018-1-5 09:18 编辑

集合&迭代器

#Collection中的常用功能

     *Boolean add(Object e):向集合中添加元素

     *void clear():清空集合中所有的元素

     *Boolean contains(Object o):判断集合中包含某个元素

     *boolean isEmpty():判断集合中的元素是否为空

     *boolean remove(Object o): 根据元素的内容来删除某个元素

     *int size():获取集合的长度

     *Object[] toArray():将集合转换成数组并把集合中的元素存储到数组中

#迭代器

     java中提供了很多集合,它们存储元素时,采用的存储方式不同,我们要取出这些集合的元素,可通过一个通用的方式来完成。

Collection集合元素的通用获取方式:在获取元素之前先判断集合有没有元素,如果有就把元素取出来,继续判断,如果还有就继续取出来,一直把集合中的所有元素取出来,这种方式我们的专业术语称之为迭代器。

    集合中把这些取元素的方式描述在Iterator接口中,Iterator接口的常用方式如下:

    &hasNext()方法:判断集合中是否有元素可以迭代。

    &next()方法:用来返回迭代的下一个元素,并把指针移动到下一位。

#并发修改异常

并发修改异常发生的异常原因:

    当使用迭代器遍历集合时,对集合中的元素进行增加和删除,改变集合的长度,就会发生并发修改异常

#增强for&泛型

    泛型的引入:我们知道集合中可以存放任意对象,然后都会被提升为Object,我们取出每个对象对其操作时,必须进行类型转换,泛型的引入可以避免类型的问题。

#增强for

    增强for专门用来遍历数组和集合的,它的内部是存在迭代器的原理的,不要对集合进行增删操作。

格式:
    for(元素的类型 变量:集合或者数组对象) {
                可以直接使用变量;
}
package cn.itheima_04;
import java.util.ArrayList;
import java.util.Collection;
Collectoin的子体系list
      有序的(存储和读取的顺序是一致的)
      有整数索引
       允许重复的
package cn.itheima_04;
import java.util.ArrayList;
import java.util.List;
/*
* list的特有功能:
*        增  void add(int index, E element)
*        删 E get(int index
*        改  E remove(int index
*        查  E set(int index, E element)
*/
public class Test_12 {

        public static void main(String[] args) {
                //创建列表对象
                List<String> list = new ArrayList<String>();
                //增  void add(int index, E element)在指定的索引出添加指定的元素
                list.add(0,"java");

                list.add(1,"hello");

                list.add(0,"world");
                //删 E get(int index)通过索引获取元素
                System.out.println(list.get(2));
                //改  E remove(int index)删除指定索引上的元素
                System.out.println(list.remove(1));
                //查  E set(int index, E element)把指定索引上的元素进行修改
                System.out.println(list.set(0, "play"));


                System.out.println(list);
        }
}
LinkedList的特有功能:
package cn.itheima_04;
import java.util.LinkedList;
/*
* List的常用子类:
*         ArrayList
*             底层是数组结构      查询快        增删慢
*         LinkedList
*             底层的结构是链表        查询慢         增删快
* 什么情况该选择哪种方式使用
*             需要查询多的时候选择ArrayList,反之选择LinkedList   
*                     
*   LinkedList的特有功能:
*             void addFirst(E e) 将指定元素插入此列表的开头。
*             void addLast(E e)  将指定元素添加到此列表的结尾
*             E getFirst() 返回此列表的第一个元素。
* 。              
            E getLast()  返回此列表的最后一个元素
*             E removeFirst() 移除并返回此列表的第一个元素。
*             E removeLast()  移除并返回此列表的最后一个元素
/*
* 使用HashSet对字符串存储和遍历
*
* 遍历Set有三种方式:转数组,迭代器,增强for(Set没有索引)
* 遍历list有四种:转数组,迭代器,增强for,普通for循环
*
* Iterator-----hasNext---next
*
* Set集合的特点:
*     1:无序
*     2:不允许重复,元素是唯一的
*  注意:List是允许重复的,返回值永远为true   
*/
public class Test_02 {

        public static void main(String[] args) {
                //创建HashSet对象
                HashSet<String> hs = new HashSet<String>();
                //Set<String> set = new HashSet<String>();//父类接口指向子类对象,这个是接口,这个两个创建对象都可以

                //添加字符串
                System.out.println(hs.add("hello"));
                System.out.println(hs.add("hello"));
                hs.add("world");
                hs.add("helloworld");
                //遍历方式
                //转数组
                Object[] array = hs.toArray();
                //遍历数组
                /*for (Object object : array) {

                        System.out.println(object);

                }*/
                for (int i = 0; i < array.length; i++) {

                        System.out.println(array);
                }

                System.out.println("----------");
                //迭代器
                Iterator<String> iterator = hs.iterator();
                //while判断
                while(iterator.hasNext()) {
                        String string = iterator.next();
                        System.out.println(string);
                }

                System.out.println("-------------");
                //增强for
                for (Object object : array) {

                        System.out.println(object);
                }

        }
}
package com.itheima;
import java.util.HashSet;

#IO流


#File类的构造函数

    *File(String pathname):将一个字符串对象封装成File类对象

    *File(String Parent,String Child):传入一个父级对象和子级对象

    *Boolean exists():判断指定路径或者文件夹是否存在

    *Boolean isAbsolute():判断当前路径是否是绝对路径

    *File getAbsoluteFile():获取文件的绝对路径,返回File对象
    *String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
    *String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径
    *File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径
    *String getName():获取文件或文件夹的名称
    *String getPath():获取File对象中封装的路径
    *long lastModified():以毫秒值返回最后修改时间
    *long length():返回文件的字节数
    *boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径
多线程


A:进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
B:线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
C:简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
什么是多线程呢?即就是一个程序中有多个线程在同时执行
A:创建线程的步骤:
1.定义一个类继承Thread。
2.重写run方法。
3.创建子类对象,就是创建线程对象。
4.调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法
实现线程二:实现Runnable接口
创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程。
为何要实现Runnable接口,Runable是啥玩意呢?继续API搜索。
查看Runnable接口说明文档:Runnable接口用来指定每个线程要执行的任务。包含了一个 run 的无参数抽象方法,需要由接口实现类重写该方法。

创建线程的步骤。
1、定义类实现Runnable接口。
2、覆盖接口中的run方法。。
3、创建Thread类的对象
4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
5、调用Thread类的start方法开启线程。
















欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2