Java语言进阶篇基本概念

一、Object类、常用API

1、Object类

此类事Java语言中的根类,即所有类的父类。如果一个类没有指定父类,那么默认则继承自Object类。

2、日期时间类

(1)Date类(特定的瞬间)、format类(日期/时间格式化子类的抽象类)

//创建日期对象
Date date = new Date();

//创建日期格式化对象,指定输出格式,注意:y年M月d日H时m分s秒
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = df.format(date);

System.out.println(str);//2020-01-06 19:41:56

(2)Calendar类(日历类,方便获取各个时间属性)

常用的方法:

1)get(int field):返回给定日历字段的值

2)set(int field,int value):将给定的日历字段设置为给定值。

3)public abstract void add(int field,int amount):根据给定的日历字段添加或减去指定的时间量。

4)public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对 象。Calendar类中提供很多成员常量,代表给定的日历字段:

//创建Calendar对象
        Calendar cal = Calendar.getInstance();
//设置年
int year = cal.get(Calendar.YEAR);
//设置月
int month = cal.get(Calendar.MONTH)+1;
//设置日
int dayofMonth = cal.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"年"+month+"月"+dayofMonth+"日");//2020年1月6日

getTime方法:

//创建Calendar对象
 Calendar cal = Calendar.getInstance();
 Date date1 = cal.getTime();
 System.out.println(date1);//Mon Jan 06 20:21:05 CST 2020

3、System类(提供了大量的静态方法,可以获取与系统相关的星系或系统级操作)

常用的方法:

public static long currentTimeMillis():返回以毫秒为单位的当前时间。

public static void arraycopy(Object src,int srcpos,Object dest,int despos,int length):将数组中指定的数据  拷贝到另一个数组中。(src为源数组,srcpos源数组索引起始位置,dest 目标数组,despos目标数组索引位置,length复制元素个数)

int []src = new int[] {1,2,3,4,5};

int []dest = new int[] {6,7,8,9,10};

System.arraycopy(src,0,dest,0,3);
        //src数组元素1,2,3,4,5
        //dest数组元素1,2,3,9,10

4、StringBuilder类

由于String 对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。

String s = "hello";
s+="world";
System.out.println(s);

它的内部有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder 会 自动维护内容,默认16字符空间,超过自动扩充)

public StringBuilder():构造一个空的StringBuilder容器。

public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去。

StringBuilder sb1 = new StringBuilder();
System.out.println(sb1);//空白
//使用带参构造
StringBuilder sb2 = new StringBuilder("itcast");
System.out.println(sb2);

5、包装类

(1)基本类型与字符串之间的转换

public static byte parseByte(String s):将字符串参数转换为对应的byte基本类型。
public static short parseShort(String s):将字符串参数转换为对应的short基本类型。
public static int parseInt(String s):将字符串参数转换为对应的int基本类型。
public static long parseLong(String s):将字符串参数转换为对应的long基本类型。
public static float parseFloat(String s):将字符串参数转换为对应的float基本类型。
public static double parseDouble(String s):将字符串参数转换为对应的double基本类型。
public static boolean parseBoolean(String s):将字符串参数转换为对应的boolean基本类型。

//如 int num = Integer.parseInt("100");//注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常

二、 Collection、泛型

1、Collection集合

集合是java提供的一种容器,可以存储多个数据。

集合与数组都是容器,它们有啥区别?

1)数组的长度是固定的,集合的长度是可变。

2)数组中存储的是同一种类型的元素,可以存储基本数据类型值,集合存储的都是对象。而且对象的类型可以不一致。在开发中一般对象多的时候,使用集合进行存储。

(1)集合框架

(2)Collection常用的功能

public boolean add(E e):把给定的对象添加到当前集合中。
   public void clear() :清空集合中所有的元素。
   public boolean remove(E e): 把给定的对象在当前集合中删除。
   public boolean contains(E e): 判断当前集合中是否包含给定的对象。
   public boolean isEmpty(): 判断当前集合是否为空。
   public int size(): 返回集合中元素的个数。
   public Object[] toArray(): 把集合中的元素,存储到数组中。

        // 创建集合对象使用多态形式
	Collection<String>coll=newArrayList<String>();
	 coll.add("张三");
	 coll.add("李四");
	 coll.add("王五");
	 coll.add("周六");
	 coll.add("88520");

	 System.out.println(coll.contains("王五"));//true,判断王五是否存在集合中

	 System.out.println(coll.remove("88520"));//删除集合中的与元素
	 System.out.println(coll.size());//集合中有几个元素

	 Object[] objects=coll.toArray();// 遍历数组
	 for (int i=0; i<objects.length; i++) {
		 System.out.println(objects[i]);
	     }

	 coll.clear();//清空集合
	 System.out.println(coll.isEmpty());//判断集合是否为空

2、Iterator迭代器

在程序开发中,经常需要遍历集合中的所有元素。

public Iterator iterator():获取集合对应的迭代器,用来遍历集合中的元素。

迭代:即Collection集合元素的通用获取方式。在去元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续判断,如果还有就再取出来。一直把集合中的所有元素全部取出。

public E next():返回迭代的下一个元素。

public boolean hasNext():如果仍有元素可以迭代,则返回true。

                Collection<String>coll = new ArrayList<String>();
		coll.add("串串星人");
		coll.add("吐槽星人");
		coll.add("汪星人");//遍历,使用迭代器遍历每个集合对象都有自己的迭代器

		Iterator<String>it= coll.iterator();//  泛型指的是迭代出元素的数据类型
		while(it.hasNext()){ //判断是否有迭代元素
			String s = it.next();//获取迭代出的元素
			System.out.println(s);
		}

(1)迭代器的实现原理:在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。

(2)增强for

增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

int[] arr= {3,5,6,87};//使用增强for遍历数组
for(inta : arr){//a代表数组中的每个元素
System.out.println(a);
}

3、泛型(可以在类或方法中预支地使用未知地类型)

在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。

定义和使用含有泛型地类

//自定义泛型类
class Myclass<Mvp>{//没有Mvp类型,在这里代表未知的一种数据类型 未来传递什么就是什么
	private Mvp mvp;

	public void setMvp(Mvp mvp) {
		this.mvp = mvp;
	}

	public Mvp getMvp() {
		return mvp;
	}
}
public class My {
     public static void main(String [] args) {
    	 Myclass<String> m = new Myclass<String>();//

    	 m.setMvp("MVP");
    	 System.out.println(m.getMvp());

    	 Myclass<Integer> n = new Myclass<Integer>();
         n.setMvp(123);
         System.out.println(n.getMvp());
     }
}

 定义含有泛型的方法

修饰符<代表泛型的变量> 返回值类型 方法名(参数){ }  //调用方法时,确定泛型的类型

定义含有泛型的接口

修饰符 interface 接口名<代表泛型的变量>{  }

使用格式:1)定义类时确定泛型的类型   2)始终不确定泛型的类型,直到创建对象时,确定泛型的类型

泛型通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。

三、List、set、数据结构、Colections

1、数据结构(数据存储的常用结构有:栈、队列、数组、链表和红黑树)

1)栈:stack,堆栈,它是运算受限的线性表,其限制是仅允许在表的一段进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。特点:先进后出。

压栈:就是存元素。即把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。

弹栈:就是取元素。即把栈的顶端位置元素取出,栈中已有元素一次向栈顶方向移动一个位置。

2)队列:queue,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端删除

特点:先进先出。

3)数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。

对元素的存储有以下特点

查找元素快:通过索引,可以快速访问指定位置的元素。

增删元素慢:(省略)

4)链表:linked list ,由一系列结点node(链中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

对元素的存储有以下特点:

多个结点之间,通过地址进行连接。

查找元素慢:需要通过连接的节点,依次向后查找元素。

增删元素快:都是只需要修改连接下个元素的地址即可。

5)红黑树

二叉树:binary tree,是每个结点不超过2的有序树。

红黑树:本身就是一颗二叉查找树,将节点插入后,该树仍然是一颗二叉查找树。也就意味着,树的键值仍然是有序的。

红黑树的约束:

节点可以是红色的或者黑色的。 根节点是黑色的。叶子节点(特指空节点)是黑色的。每个红色节点的子节点都是黑色的。任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同。

红黑树的特点:速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍。

2、List集合

3、List的子类ArrayList集合

4、Set接口

5、Collections(集合工具类,用来对集合进行操作)

(1)常用功能

public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素。

public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。

public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。

public static <T> void sort(List<T> list,Comparator<? super T> ):将集合中元素按照指定规则排序。

//采用默认的顺序
        ArrayList<Integer> list = new ArrayList<Integer>();

          Collections.addAll(list, 1,6,5,100);
          Collections.sort(list);
          System.out.println(list);// [1, 5, 6, 100]

          ArrayList<String> str = new ArrayList<String>();
          Collections.addAll(str, "jdk","aa","bcd","ac");
          Collections.sort(str);
          System.out.println(str);//[aa, ac, bcd, jdk]

(2)Comparator比较器

public int compare(String 01,String o2):比较两个参数的顺序。

按升序排序,则o1<o2返回负数,o1>o2返回正数,相等返回0

按降序排序,则o1>o2返回负数,o1<o2返回正数,相等返回0

ArrayList<String> str = new ArrayList<String>();
    str.add("cba");
    str.add("aba");
    str.add("sba");
    str.add("nba");

    Collections.sort(str,new Comparator<String>()){
        	   public int compare(String o1,String o2) {
        		   return o2.charAt(0)-o1.charAt(0);//比较字符串的第一个字母,按降序排序
        	   }
          });    System.out.println(str);//[sba, nba, cba, aba]

(3)Comparable和Comparator两个接口的区别

Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

四、Map

1、Map集合

Map中的集合,元素是成对存在的,每个元素由键与值两部分组成,且Map集合中不能包含重复的键,值可以重复,每个键只能对应一个值。

2、Map常用子类

HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。

LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构

3、Map接口中的常用方法

public V put(K key,V value):把指定的键与指定的值添加到Map集合中。

public V remove(Object key):把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。

public V get(Object key)根据指定的键,在Map集合中获取对应的值。

public Set<K>keySet():获取Map集合中所有的键,存储到Set集合中。

public Set<Map.Entry<K,V>>entrySet():获取到Map集合中所有的键值对对象的集合(Set集合)。

                HashMap<String,String> map = new HashMap<String,String>();

        	map.put("aa","bb");
        	map.put("cc","dd");
        	map.put("aa","jj");
        	map.put("ee","dd");

        	//键不能重复,值可以重复
        	System.out.println(map);//{aa=jj, cc=dd, ee=dd}

        	System.out.println(map.get("aa"));//据指定的键,获取集合对应的值。

注意:使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值

4、Map集合遍历键找值

                HashMap<String,String> map = new HashMap<String,String>();

        	map.put("aa","bb");
        	map.put("cc","dd");
        	map.put("ee","dd");

        	Set<String> keys = map.keySet();//获取所有的键  获取键值
            for(String key :keys) {//key 就是键
            	String v = map.get(key);//获取对应值
            	System.out.println(key+"的cp:"+v);
            }

5、Entry键值对对象(Entry将键值的对应关系封装成了对象)

public K getKey():获取Entry对象中的键。

public v getValue():获取Entry对象中的值。

在Map集合中也提供了获取所有Entry对象 public Set<Map.Entry<k,v>> entrySet():获取到Map集合中所有的键值对对象的集合(Set集合)。

//Map集合遍历键值对方式
                HashMap<String,String> map = new HashMap<String,String>();

        	map.put("aa","bb");
        	map.put("cc","dd");
        	map.put("ee","dd");

        	Set<Entry<String,String>> entrySet = map.entrySet();//获取所有的entry对象entrySet

        	for(Entry<String,String> entry:entrySet) {//遍历的到每一个entry对象
        	  String key = entry.getKey();
        	  String value = entry.getValue();
        	  System.out.println(key+"的cp是:"+value);
        	}

6、HashMap存储自定义类型键值

7、LinkedHashMap

保证元素迭代顺序:

                LinkedHashMap<String,String> map = new LinkedHashMap<String,String>();
        	map.put("aa","bb");
        	map.put("ee","dd");
        	map.put("cc","dd");

        	Set<Entry<String,String>> entrySet = map.entrySet();//获取所有的entry对象entrySet

        	for(Entry<String,String> entry:entrySet) {//遍历的到每一个entry对象
        	  String key = entry.getKey();
        	  String value = entry.getValue();
        	  System.out.println(key+"的cp是:"+value);
        	}

  

原文地址:https://www.cnblogs.com/zws-bugging/p/12158485.html

时间: 2024-08-29 03:28:10

Java语言进阶篇基本概念的相关文章

java web进阶篇(三) 表达式语言

表达式语言(Expression Language ,EL)是jsp2.0中新增的功能.可以避免出现许多的Scriptlet代码 格式: ${ 属性名称 },  使用表达式语言可以方便的访问对象中的属性,提交的参数或者进行各种数学运算,而且使用表达式语言最大的特点是如果输出的内容是null,则会自动使用空字符串("")表示. <%request.setAttribute("name", "info");%> <h1>${n

java web进阶篇(四) Tomcat数据源

动态web开发的最大特点是可以进行数据库的操作,传统的jdbc操作由于步骤重复性造成程序性能下降. 先来回顾JDBC的操作原理 1.加载数据库驱动程序,数据库驱动程序通过classpath配置. 2.通过DirverManager类取得数据库连接对象. 3.通过Connection实例化PreparedStatement对象,编写sql语句命令操作数据库. 4.数据库属于资源操作,操作完成后要关闭数据库以释放资源. 其实以上操作,1.2.4步骤是重复的,保留3,实际上就是数据源产生的原因. 数据

java基础进阶篇(六)_HashTable------【java源码栈】

一.概述 ??前面介绍了HashMap的结构和原理,这里介绍个类似HashMap的结构Hashtable. ??HashTable 官方解释是HashMap的轻量级实现, 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射. ??所以我们结合HashMap来介绍HashTable, 比较下两者的区别. ??HashTable 使用的很少, 它支持线程安全, 通过内部方法加上 synchronized 实现, 因此同步锁的密度太大了, 在实际情

java基础进阶篇(七)_LinkedHashMap------【java源码栈】

目录 一.概述 二.特点 三.应用场合 四.构造方法 1.参数为空 2.accessOrder 五.源码结构分析 六.常见问题 1.如何实现的元素有序? 2.如何保证顺序的正确以及同步 3.如何实现两种顺序(插入顺序或者访问顺序)? 4.为什么重写containsValue()而不重写containsKey()? 七.常用方法 一.概述 ??LinkedHashMap是HashMap的子类,关于HashMap可以看下前面的章节:java基础进阶篇 HashMap public class Lin

【Java 语言生态篇】Junit 测试单元

01 概述 JUnit是一个由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework).Junit测试是白盒测试.JUnit有它自己的JUnit扩展生态圈.多数Java的开发环境都已经集成了JUnit作为单元测试的工具.[1] JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试.他是用于单元测试框架体系xUnit的一个实例(用于java语言).它包括以下特性: 1.用于测试期望结果的断言(Asser

Java语言进阶过程(转)

[以下肯定是不完整的列表,欢迎补充] Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了. 但有一些一般的步骤: 1. 熟悉一种文本编辑器,比如Vim, Emacs, Notepad++, TextMate等.知道哪些是开源的,哪些是闭源的,哪些要收费.养成不用盗版软件的习惯. 2. 安装JDK(建议用你的Linux发行版自带的软件包管理器安装openjdk,过程中可能需要读发行版特定的文档) 3. 写一个Java的Hello world程序,并用命令行工具javac编译

Java面向对象进阶篇(包装类,不可变类)

一. Java 8的包装类 Java中的8种基本数据类型不支持面向对象的变成机制,也不具备对象的特性:没有成员变量,方法可以调用.为此,Java为这8 种基本数据类型分别提供了对应的 包装类(Byte,Short,Integer,Long,Double,Float,Charater,Boolean). 从jdk 1.5开始,Java提供了自动装箱和自动拆箱的功能.自动装箱就是可以把一个基本类型变量赋给对应的包装类变量.自动拆箱与之相反. 包装类提供了基本类型变量和字符串之间的转换的方法.有两种方

java基础进阶篇(五)_HashSet------【java源码栈】

目录 一.概述 二.源码分析 1.HashSet 源码 2.两个重要成员变量 三.构造方法 1.public HashSet(); 2.public HashSet(Collection<? extends E> c); 3.public HashSet(int initialCapacity, float loadFactor); 4.public HashSet(int initialCapacity); 5.特殊的构造方法 四.常用方法 1.int size() 2.boolean is

java语言之面向对象的概念和和类与对象的基础知识

1. 什么是面向对象 (1)面向对象是一种编程方法 (2)面向对象是一种思维方式 (3)面向对象不是一种编程语言 2. 面向对象的优势 3. 如何学习面向对像 (1)掌握一种面向对象语言的语法 (2)掌握面向对象的思维方式 (3)熟悉面向对象设计原则 (4)掌握面向对象的设计模式 4. 面向对象的思维方法 (1)首先确定由谁来做,其次确定怎么做 (2)首先考虑整体,其次考虑局部 (3)首先考虑抽象,其次考虑具体 5. 什么是类 类是定义同一类所有对象的变量和方法的蓝图或原型 6. 如何创建一个类