Java基础[七]:数组、集合和字符串

7、数组、集合和字符串

7.1 数组

在这里插入图片描述

在这里插入图片描述

7.1.1 数组定义

在这里插入图片描述

7.1.2 一维数组

定义

  • 一维数组(简称为数组)是由一组具有相同类型的变量组成的有序集合。
  • 数组中的变量被称为数组元素。
  • 每个元素在数组中的位置被称为元素的下标。
  • 在JAVA中,数组是被当作对象来处理的。

一维数组的声明:

  • 数组一般用来组合相同类型的对象。
  • 数组允许通过公共的名称来引用该组对象。
  • 数组声明创建一个引用,用它可以引用一个数组。

声明格式:
在这里插入图片描述

数组的类型:
在这里插入图片描述
创建数组:
在这里插入图片描述

例如,下面两种创建方式的意义相同。

 int[ ]  a=new  int[10]int  a[ ]=new  int[10]

创建基本类型数组:
例如,创建一个基本(char)类型数组:

 public char[ ] createArray(){
 char[ ] s;
 s=new char[26];
 for(int i=0;i<26;i++){
	s[i]=(char)(A+i);
}
 return s;
 }

另一示例,创建一个对象数组:

 public Point[ ] createArray(){
 Point[ ] p;
 p=new Point[10];
 for(int i=0;i<10;i++){
	p[i]=new Point(i,i+1);
}
 return p;
 }

另一示例,创建一个对象数组:

public Point[ ] createArray(){
 Point[ ] p=new Point[10];
 for(int i=0;i<10;i++){
	p[i]=new Point(i,i+1);
}
 return p;
 }

在这里插入图片描述
初始化数组-整型数组:

  • 数组的初始化是指:在创建数组实例时进行元素的初始化。
    例如,int[ ] group={0,1,2,3,4,5,6,7,8,9};
  • 其意义是:首先创建一个长度为10的int型数组实例,并使它们的初值依次为给定的初值;
  • 然后将该数组实例赋给引用名group。

写法一(动态初始化):
int intArray[ ];
intArray=new int[5];

此时数组元素均为默认值0,可以逐个赋值:
intArray[0]=1;
intArray[1]=2;
intArray[2]=3;

写法二(静态初始化):
int intArray[ ]=new int[]{1,2,3};

int intArray[ ]={1,2,3};

省略了指定数组大小,
此时数组的大小由大括号中值的个数决定,
这种方式需指定数组中各个元素的值。

初始化数组-对象数组:
写法一(动态初始化):
Point PArray[ ];
PArray=new Point[3];

此时数组元素的值为默认值null,可逐个赋值:
PArray[0]=new Point(0,1);
PArray[1]=new Point(1,2);
PArray[2]=new Point(2,3);

写法二(静态初始化):
Point PArray[ ]=new Point[]{
new Point(0,1),
new Point(1,2),
new Point(2,3)};

Point PArray[ ]={
new Point(0,1),
new Point(1,2),
new Point(2,3)};

初始化数组-字符串数组
写法一(动态初始化):
String names[ ];
names=new String[3];
逐个赋值:
names[0]=“How”;
names[1]=“are”;
names[2]=“you”;

写法一(动态初始化):
String names[ ];
names=new String[3];
names[0]=new String(“How”);
names[1]=new String(“are”);
names[2]=new String(“you”);

写法二(静态初始化):
1.String names[ ]=new String[]{“How”,”are”,”you”};
2.String names[ ]={“How”,”are”,”you”};
3.String names[ ]={
new String(“How”),
new String(“are”),
new String(“you”)};

在这里插入图片描述
在这里插入图片描述
一维数组的重定义:
在这里插入图片描述

数组边界:

  • 在Java编程语言中,所有数组的索引均从0开始。
  • 数组的元素数作为数组对象的一部分存储在length属性中。
  • 如果发生边界溢出访问,那么就将引发运行时异常。

使用length属性对数组作如下循环:

 int list[ ]={1,2,3};
 for(int i=0;i<list.length;i++){
     System.out.println(list[i]);
 }

在这里插入图片描述
数组的length 域:
在这里插入图片描述

对象数组复制:
在这里插入图片描述
在这里插入图片描述
数组的深度拷贝:

在这里插入图片描述
如果数组元素对象不支持深度拷贝,数组也无法支持深度拷贝

Point[] w = new Point[u.length];
for (int i = 0; i < u.length; ++i) {
	w[i] = (Point) u[i].clone();
}

7.1.3 二维数组

二维数组的声明与定义:
在这里插入图片描述
二维数组的创建:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二维数组的初始化
在这里插入图片描述
初始化二维整型数组:

int [][]aVar=new int[][]{{1,2,3},{4,5,6}};int [][]aVar={{1,2,3},{4,5,6}};int a[][]=new int[2][];
a[0]=new int[]{1,2,3};
a[1]=new int[]{4,5,6};


错误的写法:
int a[][]=new int[2][];
a[0]={1,2,3};
a[1]={4,5,6};

初始化字符串数组:

String s[][]=new String[2][];
s[0]=new String[2];
s[1]=new String[2];
s[0][0]="good";
s[0][1]="luck";
s[1][0]="to";
s[1][1]="you";

错误的写法:
String s[][]=new String[2][];
s[0]={"good","luck"};
s[1]={"to","you"};

二维数组的访问:

 int a[][]={{1,2,3},{3},{4,5,6}};
 for(int i=0;i<a.length;i++)
    for(int j=0;j<a[i].length;j++)
       System.out.println(a[i][j]);

二维数组例子:
在这里插入图片描述
非矩阵二维数组示例(不推荐)
在这里插入图片描述

二维数组初始化:
在这里插入图片描述
二维数组例子:
在这里插入图片描述
在这里插入图片描述

二维数组遍历:

34for (int c = 0; c < m.length; ++c)
	for (int r = 0; r < m[c].length; ++r) {
		   System.out.print("Enter a value: ");
		   m[c][r] = stdin.nextInt();
	}

34for (int r = 0; r < m.length; ++r)
	for (int c = 0; c < m[r].length; ++c) {
		   System.out.print("Enter a value: ");
		   m[r][c] = stdin.nextInt();
	}

二维数组默认初始化:
在这里插入图片描述
多维数组需要注意的地方:
在这里插入图片描述
数组的限制:
在这里插入图片描述

7.2 集合

7.2.1 List

List接口: public interface List extends Collection

  • 是Collection接口的子接口,列表,有顺序的集合
  • 提供的方法:
    • E get(int index):返回列表中指定位置的元素
    • E set(int index, E element):用element替换列表中index处的元素
    • void add(int index, E element):在列表的指定位置插入指定元素
    • E remove(int index):移除列表中指定位置的元素
    • int indexOf(Object o):返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1

List示例:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
public class CC1 {
 	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
			list.add(new Integer(6));
			list.add(new Integer(9));
			list.add(new Integer(3));
			list.add(new Integer(5));
			list.add(new Integer(6));
			Iterator<Integer> it = list.iterator();
			while(it.hasNext()){
				System.out.println(it.next());
			}
		}
 }

7.2.2 Set

Set接口:public interface Set extends Collection

  • 是Collection接口的子接口
  • 不包含重复元素的集合,模拟数学上的 “集合”
  • 未引入新的方法
  • 与List的区别是,List元素有位置概念,Set集合只有元素
import java.util.HashSet;
import java.util.Set;

public class Main {
  public void hashSetExample() {

        Set vehicles = new HashSet();
        String item_1 = "Car";
        String item_2 = "Bicycle";
        String item_3 = "Tractor";
        boolean result;

        result = vehicles.add(item_1);
        System.out.println(item_1 + ": " + result);
        result = vehicles.add(item_2);
        System.out.println(item_2 + ": " + result);
        result = vehicles.add(item_3);
        System.out.println(item_3 + ": " + result);
        result = vehicles.add(item_1);
        System.out.println(item_1 + ": " + result);
        result = vehicles.add(null);
        System.out.println("null: " + result);
        result = vehicles.add(null);
        System.out.println("null: " + result);
    }

public static void main(String[] args) {
        new Main().hashSetExample();
    }
}

7.2.3 Vector

Vector:变长的对象数组

  • public class Vectorextends AbstractListimplements List<E
  • 可以根据下标来引用数组元素,可以追加对象元素数量,可以修改、删除其中的对象。
  • Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

Vector对象创建:
在这里插入图片描述
Vector类添加元素:
在这里插入图片描述

修改与删除元素Vector中的元素:

在这里插入图片描述
查找Vector中的元素:
在这里插入图片描述

public class Temp {
	public static void main(String[] args) {
		Vector strs = new Vector(10, 10);
		strs.add("str1");
		strs.add("str2");
		strs.add("str3");
		strs.add("str4");
		strs.add("str5");
		System.out.println(strs.toString());
		String str = (String) strs.elementAt(0);
		strs.set(2, "new str2");
		strs.remove("str4");
		Iterator<String> it = strs.iterator();
		while (it.hasNext())
			System.out.print(it.next() + "  ");
	}
}

7.3 Map

Map接口:

  • 是一组成对的<键-值>对象,
  • Map中不能有重复的键
  • 包含HashMap、LinkedHashMap、TreeMap……
  • 主要的方法有:
    • V put(K key, V value);
    • V get(Object key);

HashMap示例

public class T2 {
 	public static void main(String[] args) {
		Map <String,String> map = new HashMap<String,String>();
		map.put("1", "星期一");
		map.put("2", "星期二");
		map.put("3", "星期三");
		map.put("4", "星期四");
		map.put("5", "星期五");
		map.put("6", "星期六");
		map.put("7", "星期日");
		Set<String> keys = map.keySet();
		Iterator<String> it = keys.iterator();
		while(it.hasNext()){
			String key = it.next();
			String value =map.get(key);
			System.out.println(key+" "+value);
		}
	}
 }

7.4 字符串

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例子: 判断一个字符串中共出现几个en

class Test3
{   public static void main(String args[])
    {  int number=0; 
       String s="student;entropy;engage,english,client";
       for(int k=0;k<s.length();k++)
        {  if(s.regionMatches(k,"en",0, 2))
             { System.out.printf("k=%d\n",k);
               number++;
             }
         } //从k的位置开始取长度为2的字串,从“en”的0开始取长度为2的字串
       System.out.println("number="+number);
    }
}
//region 范围 区域  Match匹配

在这里插入图片描述

在这里插入图片描述
例子:

  • String tom=“I am a good cat”;
  • System.out.println(tom.indexOf(“I”));
  • System.out.println(tom.indexOf(“a”));
  • System.out.println(tom.indexOf(“a”,7));
  • System.out.println(tom.indexOf(“good”));
  • System.out.println(tom.indexOf(“w”,2));
  • //index 标志 指示

在这里插入图片描述
例子:

  • String tom=“I love them”;
  • String s1=tom.substring(2);
  • String s2=tom.substring(2,5);
  • System.out.println(s1);
  • System.out.println(s2);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.5 泛型

BooleanFoo.java:

public class BooleanFoo {
    private Boolean foo;
 
    public void setFoo(Boolean foo) {
        this.foo = foo;
    }
 
    public Boolean getFoo() {
        return foo;
    }
}

IntegerFoo.java:

public class IntegerFoo {
    private Integer foo;
 
    public void setFoo(Integer foo) {
        this.foo = foo;
    }
 
    public Integer getFoo() {
        return foo;
    }
}

问题:

  • 示例1与示例2中的两个类除了声明成员的类、参数行的类型和和方法返回值的类型不同之外,其余的代码完全相同
  • 复制修改代码
  • 返回值类型和参数行的类型使用Object类代替

ObjectFoo.java:

public class ObjectFoo {
    private Object foo;
 
    public void setFoo(Object foo) {
        this.foo = foo;
    }
 
    public Object getFoo() {
        return foo;
    }
}

定义泛型类;

class Test<T> { private T a;}
T:类型变量

GenericFoo.java:

public class GenericFoo<T> {
    private T foo;
 
    public void setFoo(T foo) {
        this.foo = foo;
    }
 
    public T getFoo() {
        return foo;
    }
}

GenericFooDemo.java:

public class GenericFooDemo {
    public static void main(String[] args) {
        GenericFoo<Boolean> foo1 = new GenericFoo<Boolean>();
        GenericFoo<Integer> foo2 = new GenericFoo<Integer>();
 
        foo1.setFoo(new Boolean(true));
        Boolean b = foo1.getFoo();
        System.out.println(b);

        foo2.setFoo(new Integer(10));
        Integer i = foo2.getFoo();
        System.out.println(i);
    }
}

下一章节见https://blog.youkuaiyun.com/fageaaa/article/details/154516265

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳与星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值