黑马程序员---------java 基础知识复习(foreach、Arrays、String、StringBuffer、容器类)

本文回顾了Java基础知识,包括foreach语句遍历数组、Arrays类的使用、String与StringBuffer类的操作、日期时间类的使用及容器类的基本介绍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

java 基础知识复习

1、foreach语句遍历数组
2、使用Arrays类对数组进行操作
3、String/StringBuffer类的使用
4、Date/Calendar/DateForat等类的使用
5、容器类介绍 List/Set/Map
ArrayList/LinkedList, HashSet/TreeSet

一、foreach语句遍历数组(增强的for循环)

int a[] = new int[10];
for(int i=0;i<10;i++)
{
a[i] = 2*i + 3;
}
//     for(int i=0;i<10;i++)
//     {
//     System.out.print(a[i] + " ");
//     }

//foreach语句,每遍历一次,就把数组的当前元素的值赋给迭代变量
//i,i就代表当前元素的值。
//注意:foreach只能遍历数组,不能改变数组元素的值

for(int i:a)
{
  System.out.print(i + " ");
}
Iterator 迭代器 遍历一个容器对象

二、Arrays类提供了对数组的一些常用操作。比如排序,将数组转化为List对象,可以进行查找(提供了二分法查找),判断两个数组是否相等的方法。

java.util.Arrays
static List asList():将一个数组转换为List对象。将数组作为一个整体 放到List对象中(变成了List中的一个元素)
fill(type a[],T key):将数组a的所有元素的值填充为key
boolean equals(type a[],type b[]):两个数组相等的条件:长度相同,对应位置的值相等。

三、String、StringBuffer类的使用
在Java中使用String表示字符串。在Java中声明字符串的方法有两种:
(1)
String s = “Java”; //将一个字符串常量”Java”赋给变量s
(2)
String s = new String(“Java”);
这种方法在内存中又开辟一段空间,在该空间存储一个字符串”Java”;
getBytes(String encoding):将字符串转换为字节数组;

1、StringBuffer
StringBuffer的功能比String强,在对字符串的CRUD方面性能比String效率高。
另外,StringBuffer 提供了默认为16个字节的缓冲区。

构造方法:
StringBuffer():构建一个空字符串,默认的capacity大小为16字节
StringBuffer(String s):构建一个字符串s,默认的capacity大小为16字节
StringBuffer(int cap):指定capacity大小为cap的字符串

StringBuffer s = new StringBuffer(100);
System.out.println("capacity:" + s.capacity());
System.out.println("length:" + s.length());

s.append("hello");//在尾部追加
s.insert(3, "java"); //在第3字符串之前插入,0序开始
System.out.println(s);
s.delete(3,4); //删除[start,end)
reserve():执行完毕之后,字符串的内容反转。
trimToSize():将字符串的capacity设置为length长度一致。

String s1 = "java";
String s2 = new String("java");
String s3 = new String("java");

StringBuffer s4 = new StringBuffer("java");
StringBuffer s5 = new StringBuffer("java");
//在String类中,重写了equals(),String类中的
//equals()是比较两个字符串的内容是否一致。
//==是比较两个字符串的地址是否相等
System.out.println(s1.equals(s2));//true
System.out.println(s1==s2);//false
System.out.println(s3.equals(s2)); //true
System.out.println(s3==s2);//false
//在StringBuffer类继承Object类,并且没有重写equals()
//equals()与==的功能 是一样的,比较地址是否相等。
System.out.println(s4.equals(s5)); //false
System.out.println(s4==s5);//false
//
System.out.println(s4.equals(s3)); //false
//s6指s5的地址
StringBuffer s6 = s5;
System.out.println(s6.equals(s5)); //true
System.out.println(s6==s5);//true

四、容器
容器解决了数组的两个问题:容器的长度可变;容器放置的元素可以类型不一致(一旦元素放到容器中之后,将先转换为Object类型)。
当元素从容器中取出来时,类型为Object类型,要进行相应的类型转换。使用泛型(Genic)可以不用再进行类型转换。
String i = “100”;
List list = new ArrayList();
list.add(i);//转换为Object类型
//取出i,i此时为Object
String s = (String)list.get(0);

使用泛型的情况:
String i = “100”;
List<String> list = new ArrayList<String>();
list.add(i);//转换为Object类型
//取出i,i此时为Object
String s = list.get(0);

容器类的继承关系:
在Java中定义了两种容器对象:Collection(集合)和Map(映射)
Collection像数列
“abc”,13,”java”,64,new Date()……
Map像数据字典
Key(键) Value(值)
Name “zhangsan”
Age 19
…… ……

Collection接口又分为两类:List、Set

Collection/List/Set/Map都是接口。
void method(T E)
Element:元素<E>
Key:Map(<K>,<V>),键名
Value:值<V>
Type: 任意类型

Collection接口中的方法:
add(E e):将元素e添加到容器中,追加
addAll(Collection c)将容器c所有元素添加到容器中。
clear():清空容器
contains(Object o):判断 o是否包含在容器中。
isEmpty():判断容器是否为空
Iterator iterator():返回一个迭代器对象,通过该迭代器可以遍历容器。
Iterator接口中有两个重要方法:next()返回容器中的下一个元素。hasNext()判断容器中是否还有元素。
size():返回容器中元素的个数。

容器的访问与遍历

Collection c = new ArrayList();
        c.add("java");
        c.add(100);
        c.add(new Date());
    
        //取得容器中的元素
        //System.out.println(((ArrayList)c).get(2));
        //遍历容器
        Iterator it = c.iterator();
        while(it.hasNext())
        {
            System.out.println(it.next());
        }
        
        for(int i=0;i<c.size();i++)
        {
            System.out.println(((ArrayList)c).get(i));
        }

List接口和ArrayList类

String s1 = "hello";
        String s2 = "Java ";
        String s3 = "0371-23526435";
        String s4 = "Hibernate";
        String s5 = "Struts";
        String s6 = "Spring";
        String s7 = "MVC";
        String s8 = "IoC/AOP"; //Inverse of Control
        //Aspect Oriented Programming
        //向上转型,编译时具有父类的特点,运行时调用的是子类的方法,成员变量使用的父类
        List<String> stringList = new ArrayList<String>();
        stringList.add(s1);
        stringList.add(s2);
        stringList.add(s3);
        stringList.add(s4);
        stringList.add(s5);
        stringList.add(s6);
        stringList.add(s7);
        stringList.add(s8);
        //如果不加泛型,需要强制类型转换,将Object类型转换为目标类型
        String data = (String)stringList.get(0);
        //容器、数组都是0序开始的。
        
        //stringList.clear();
        stringList.add(0, "data");
        stringList.add(3,"two");
        stringList.add(7,"two");
        //System.out.println(stringList);
        System.out.println(stringList.lastIndexOf("two"));
        Iterator<String> it = stringList.iterator();
//        while(it.hasNext())
//        {
//            System.out.print(it.next() + "  ");
//            //it.remove();
//        }
        
        ListIterator<String> li = stringList.listIterator();
        
        System.out.println(li.hasPrevious());
        while(li.hasNext())
        {
            System.out.print(li.next() + "  ");
            
        }
        
        System.out.println();
        
        while(li.hasPrevious())
        {
            System.out.print(li.previous() + "  ");
        }
        System.out.println();
        
        List<String> temp = stringList.subList(2, 7);
        System.out.println(temp);

4、Iterator接口
Iterator接口可以对容器对象进行遍历,而且还可以删除指定的元素。
Boolean hasNext():判断容器是否还有元素。
E next():返回下一个元素。
void remove():删除容器中的最后一个元素。


5、Set
set是一个无序的集合,添加元素的次序与实际保存的元素次序无关。不能添加重复的元素。

Set<Integer> set = new HashSet<Integer>();
        set.add(235);
        set.add(634);
        set.add(74);
        set.add(-3465);
        set.add(74);
        set.add(null);
    
        Set<String> s = new TreeSet<String>();
        s.add("aa");
        s.add("ab");
        s.add("dd");
        s.add("ce");
        System.out.println(s);

Map接口与HashMap类
Boolean containsKey(Object key):判断map对象是否含有key对象
Boolean containsValue(Object value):判断map对象是否含有value对象
entrySet():将Map对象转换为Set对象
Value get(Object key):获取map中的某一个元素
keySet():将一个map对象的key转换为Set对象
put(Object key,Object value):向map中添加一对键值对
size():返回map对象有多少个键值对。


package com.chde6;
import java.util.*;
public class HashMapDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        HashMap<String,Person> map = new HashMap<String,Person>();
        map.put("zhangsan",new Person("zhangsan",20,"男"));
        map.put("tom",new Person("tom",20,"男"));
        map.put("jack",new Person("jack",22,"男"));
        map.put("mike",new Person("mike",23,"男"));
//        map.put(1, 100);
//        map.put("k1", "Java");
        Set<?> set = map.entrySet();
        Iterator<?> it = set.iterator();
        while(it.hasNext())
        {
            System.out.println(it.next());
            
        }
        System.out.println(map);
        
        if(map.containsKey("tom"))
        {
            System.out.println(map.get("tom"));
        }
        
        Set s = map.keySet();
        Iterator i = s.iterator();
        while(i.hasNext())
        {
            System.out.println(map.get(i.next()));
        }
    }
}

class Person
{
    private String name;
    private int age;
    private String sex;
    public Person(String name, int age, String sex) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值