java程序设计基础

本文介绍了Java中数据结构的基础知识,包括栈和队列的实现,以及程序设计的基本概念。栈使用链表和数组实现,队列则采用链表和数组结构。文章还涉及了String类、StringBuilder和StringBuffer的使用,以及ArrayList、Vector和Map接口的相关操作。此外,还讲解了日期处理和程序控制结构。

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

数据结构

栈stack

实现:链表:表的顶端LIFO,插入push,弹出pop

           数组:空栈topOfStack初始化-1;插入,topOfStack加1,theArray[topOfStack]=x;弹出,返回值theArray[topOfStack],                                topOfStack减1

1.消除尾递归:将代码放到一个while循环中,用每个方法参数的一次赋值代替递归调用

2.中缀转后缀:操作数放到output中。操作符放到栈中,当前操作符放入栈之前,只要它优先级小于或等于栈顶操作符,栈顶操作符被弹出到output中,它被压入栈中。左括号优先级最高放入栈中,重复上述,直到读到右括号,将栈元素中的操作符直到左括号弹出到output,左右括号不放入output中。输入为空,将栈中操作符全部弹出到output。

 

队列queue

实现:链表&数组,enqueue队尾入队,dequeue队头出队

           数组实现:数组theArray,两端位置front和back,元素个数currentSize

                   元素x入队: currentSize和back加1,theArray[back]=x

                   元素出队:返回值theArray[front], currentSize减1,front加1

           循环数组:只要front或back到达数组尾端回绕到对头。

 

程序设计基础

 

Enumeration接口:使用在Vector和Propertie,这种传统接口已被迭代器取代,

boolean hasMoreElements( ) 测试此枚举是否包含更多的元素;

Object nextElement( )如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素

 

String类:不可改变,管理者

length()静态方法format()创建可复用的格式化字符串
'+'操作符来连接字符串

int compareTo() 

int compareToIgnoreCase()

char charAt(int index)

boolean endsWith(String suffix)

boolean equalsIgnoreCase(String anotherString)

String[] split(String regex)

boolean equals()

boolean equalsIgnoreCase()

int indexOf()、int lastIndexOf()
String replace(char oldChar, char newChar)String replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
String[] split(String regex)String substring(int beginIndex, int endIndex)

char[] toCharArray()

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。

String toLowerCase()

String toUpperCase()

String fs;

fs = String.format("The value of the float variable is " + "%f, while the value of the integer "

                             + "variable is %d, and the string " + "is %s", floatVar, intVar, stringVar);

System.out.println(fs);

 

StringBuffer和StringBuilder类:对象能够被多次的修改,并且不产生新的未使用对象;单任务访问,StringBuilder有速度优势;多任务访问,在应用程序要求线程安全的情况下,则必须使用StringBuffer类

public StringBuffer append(String s)
将指定的字符串追加到此字符序列。
public StringBuffer reverse()
 将此字符序列用其反转形式取代。
public delete(int start, int end)
移除此序列的子字符串中的字符。
public insert(int offset, int i)
将 int 参数的字符串表示形式插入此序列中。
replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。

遍历:

String s = in.nextaLine();

StringBuilder  stringbuilder =  new StringBuilder();

for(int i =0;i<s.length();i++){

if(Character.isLetterOrDigit(s.charAt(i))){

    stringBuilder.append(s.charAt(i));

}

}

 

 

数组:Java数组不能增长;创建一个可扩展的数组使用ArrayList或Vector

           dataType[] arrayRefVar;

          arrayRefVar = new dataType[arraySize];//索引值从0到arrayRefVar.length-1

          遍历:for (double element: myList) {          System.out.println(element);       }

 

Arrays类:实现数组的排序查找、数组的比较和填充数组元素以及返回数组的字符串表示

                              java.util.Arrays.方法名(数组名)

public static int binarySearch(Object[] a, Object key)
用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
public static boolean equals(long[] a, long[] a2)
如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
public static void fill(int[] a, int val)
将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
public static void sort(Object[] a)
对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。

 

ArrayList类:存储不限定个数的对象,是泛型类,具有泛型类型E,不能使用基本数据类型来代替泛型类型;

ArrayList<AConcreteType> list = new ArrayList<>();

list.add(new Integer(10));     list.add([index,]object);     list.remove(object/index);     list.get(index);

list.size();   list.clear();     list.contains(object);     list.set(index,E);

遍历:for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }

 

Vector类:实现了一个动态数组,可以改变大小,是同步访问

Vector v = new  Vector()   

Vector(int size)    

Vector(int size,int incr) //增量incr指定,向量每次增加的元素数目

Vector(Collection c)

int capacity() 
返回此向量的当前容量。
void add(int index, Object element) 
 在此向量的指定位置插入指定的元素。
 void addElement(Object obj) 
 将指定的组件添加到此向量的末尾
boolean contains(Object elem) 
如果此向量包含指定的元素,则返回 true。
void insertElementAt(Object obj, int index) 
将指定对象作为此向量中的组件插入到指定的 index 处
  
  

           遍历:

          1.  //Enumeration elements() 返回此向量的组件的枚举

Enumeration vEnum = v.elements();

while(vEnum.hasMoreElements())

       System.out.print(vEnum.nextElement() + " "); 

 

      2.  for (int i = 0; i < v.size(); i++) {
            System.out.print(v.get(i));    
        }
        
       3. Iterator<String> it = v.iterator();
        while (it.hasNext()) {
            String string = (String) it.next();
            System.err.print(string);
        }

 

 Stack 类:栈是Vector的一个子类,后进先出;

        Stack st = new Stack();

boolean empty() 
测试堆栈是否为空。
Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。
Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。
Object push(Object element)
把项压入堆栈顶部。
int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。

 

Map 接口:键和值一一映射. 可以通过键来获取值

      Map m1 = new HashMap();

void clear( )从此映射中移除所有映射关系(可选操作)。
boolean containsKey(Object k)如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object v)如果此映射将一个或多个键映射到指定值,则返回 true。
Set entrySet( )返回此映射中包含的映射关系的 Set 视图。
boolean equals(Object obj)比较指定的对象与此映射是否相等。
Object get(Object k)返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
int hashCode( )返回此映射的哈希码值。
boolean isEmpty( )如果此映射未包含键-值映射关系,则返回 true。
Set keySet( )返回此映射中包含的键的 Set 视图。
Object put(Object k, Object v)将指定的值与此映射中的指定键关联(可选操作)。
void putAll(Map m)从指定映射中将所有映射关系复制到此映射中(可选操作)。
Object remove(Object k)如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
int size( )返回此映射中的键-值映射关系数。
Collection values( )返回此映射中包含的值的 Collection 视图。

 

Hashtable 接口 :支持同步,在哈希表中存储键/值对;当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值,然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。

Hashtable(int size)    

Hashtable(int size,float fillRatio) //填充比例必须介于0.0和1.0之间,它决定了哈希表在重新调整大小之前的充满程度

Hashtable(Map m)//以M中元素为初始化元素的哈希表,哈希表的容量被设置为M的两倍。

Hashtable中除了从Map接口中定义的方法外,还定义了以下方法:

Object clone( )创建此哈希表的浅表副本。
boolean contains(Object value) 测试此映射表中是否存在与指定值关联的键。
boolean containsKey(Object key)测试指定对象是否为此哈希表中的键。
boolean containsValue(Object value)如果此 Hashtable 将一个或多个键映射到此值,则返回 true。
Enumeration elements( )返回此哈希表中的值的枚举。
Object get(Object key)返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 
boolean isEmpty( )测试此哈希表是否没有键映射到值。
Enumeration keys( )返回此哈希表中的键的枚举。
Object put(Object key, Object value)将指定 key 映射到此哈希表中的指定 value。
void rehash( )增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。
Object remove(Object key)从哈希表中移除该键及其相应的值。
int size( )返回此哈希表中的键的数量。
String toString( )返回此 Hashtable 对象的字符串表示形式

遍历:

Hashtable balance = new Hashtable();

balance.put("Zara", new Double(3434.34));

Enumeration names;

names = balance.keys();

String str;

while(names.hasMoreElements()) {

str = (String) names.nextElement(); System.out.println(str + ": " + balance.get(str)); }

 

Properties 接口:继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。

                                Properties()      Properties(Properties propDefault)

除了从Hashtable中所定义的方法,Properties定义了以下方法:

String getProperty(String key)用指定的键在此属性列表中搜索属性。
String getProperty(String key, String defaultProperty)用指定的键在属性列表中搜索属性。
void list(PrintStream streamOut)将属性列表输出到指定的输出流。
void list(PrintWriter streamOut)将属性列表输出到指定的输出流。
void load(InputStream streamIn) throws IOException从输入流中读取属性列表(键和元素对)。
Enumeration propertyNames( )按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
Object setProperty(String key, String value)调用 Hashtable 的方法 put。
void store(OutputStream streamOut, String description)以适合使用  load(InputStream)方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。

遍历:

Properties capitals = new Properties();

Set states;

String str;

capitals.put("Illinois", "Springfield"); 

states = capitals.keySet(); 

Iterator itr = states.iterator();

while(itr.hasNext()) { str = (String) itr.next(); System.out.println("The capital of " + str + " is " + capitals.getProperty(str) + "."); }

 

Date类:Date date = new Date();

 

boolean after(Date date)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
Object clone( )
返回此对象的副本。
int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
int compareTo(Object obj)
若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
boolean equals(Object date)
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
int hashCode( )
 返回此对象的哈希码值。
void setTime(long time)
 
用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
String toString( )
转换Date对象为String表示形式,并返回该字符串。

使用SimpleDateFormat格式化日期:

Date dNow = new Date( );

SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

System.out.println("Current Date: " + ft.format(dNow));

使用printf格式化日期:

Date date = new Date();

// 使用toString()显示日期和时间

String str = String.format("Current Date/Time : %tc", date ); //以t开头c F D T r......

System.out.printf(str);

解析字符串为时间:

SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");

String input = args.length == 0 ? "1818-11-11" : args[0];

Date t;

try { t = ft.parse(input); System.out.println(t); }

catch (ParseException e) { System.out.println("Unparseable using " + ft); }

休眠:Thread.sleep(5*60*10);

测量时间:long start = System.currentTimeMillis( );

                  long end = System.currentTimeMillis( );

                  long diff = end - start;

Calender 类:

Calendar c = Calendar.getInstance();

或者

Calendar c1 = Calendar.getInstance();

c1.set(2009, 6 - 1, 12);//public final void set(int year,int month,int date)

c1.add(Calendar.DATE, 10);

 

随机Tip:

  • 结束程序:System.exit(0)
  • 可以从命令行向main方法传递参数,存储在args[]中
  • 不再需要某个对象时给其引用变量赋null值,Java虚拟机会自动回收其所占空间;
  • 类型转换:

                        返回基本数据类型——Integer.parseInt(String str) 是指把字符串转换为数值型        

                        返回包装类 —— Integer.valueOf(String str).intValue()  

                        把一个引用类型转化为String字符串类型——Integer.toString(int i)

                        SimpleDateFormat sf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

  • 符号*用于命令行时加"",否则表示当前目录下的所有文件
  • 限定字符串对象------String对象不可变,如果两个直接量字符串有相同字符序列,Java虚拟机将其存储在一个对象中
  • StringBuilder/StringBuffer对象可添加插入或追加新的内容
  • float/0-----输出Infinity
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值