草庐IT

java - 完成 UI Activity 分配

coder 2023-12-18 原文

<分区>

我有一个 Android 编程的 UI 实验室,我正在努力完成。我觉得我很近,但又很远。我有四个正在处理的 Activity ,但其中只有三个需要处理。这是我所拥有的。我需要帮助来解决我所缺少的。

这是第一个 Activity ,它是 AddToDoActivity

package course.labs.todomanager;
import java.util.Calendar;
import java.util.Date;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener; 
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.TimePicker;
import course.labs.todomanager.ToDoItem.Priority;
import course.labs.todomanager.ToDoItem.Status;

public class AddToDoActivity extends Activity {

// 7 days in milliseconds - 7 * 24 * 60 * 60 * 1000
private static final int SEVEN_DAYS = 604800000;

private static final String TAG = "Lab-UserInterface";

private static String timeString;
private static String dateString;
private static TextView dateView;
private static TextView timeView;


private Date mDate;
private RadioGroup mPriorityRadioGroup;
private RadioGroup mStatusRadioGroup;
private EditText mTitleText;
private RadioButton mDefaultStatusButton;
private RadioButton mDefaultPriorityButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_todo);

    mTitleText = (EditText) findViewById(R.id.title);
    mDefaultStatusButton = (RadioButton) findViewById(R.id.statusNotDone);
    mDefaultPriorityButton = (RadioButton) findViewById(R.id.medPriority);
    mPriorityRadioGroup = (RadioGroup) findViewById(R.id.priorityGroup);
    mStatusRadioGroup = (RadioGroup) findViewById(R.id.statusGroup);
    dateView = (TextView) findViewById(R.id.date);
    timeView = (TextView) findViewById(R.id.time);

    // Set the default date and time

    setDefaultDateTime();

    // OnClickListener for the Date button, calls showDatePickerDialog() to show
    // the Date dialog

    final Button datePickerButton = (Button) findViewById(R.id.date_picker_button);
    datePickerButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showDatePickerDialog();
        }
    });

    // OnClickListener for the Time button, calls showTimePickerDialog() to show
    // the Time Dialog

    final Button timePickerButton = (Button) findViewById(R.id.time_picker_button);
    timePickerButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            showTimePickerDialog();
        }
    });

    // OnClickListener for the Cancel Button, 

    final Button cancelButton = (Button) findViewById(R.id.cancelButton);
    cancelButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            log("Entered cancelButton.OnClickListener.onClick()");

            //TODO - Implement onClick().  
            Intent intent = new Intent setResult;
            finish();
            
        }
    });

    //OnClickListener for the Reset Button

    final Button resetButton = (Button) findViewById(R.id.resetButton);
    resetButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            log("Entered resetButton.OnClickListener.onClick()");

            //TODO - Reset data fields to default values
            setDefaultDateTime();
            mTitleText.setText("");
            mDefaultStatusButton.setChecked(true);
            mDefaultPriorityButton.setChecked(true);
            
        
        
        
        }
    });

    // OnClickListener for the Submit Button
    // Implement onClick().
    
    final Button submitButton = (Button) findViewById(R.id.submitButton);
    submitButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            log("Entered submitButton.OnClickListener.onClick()");

            // Gather ToDoItem data  
            
            //TODO - Get Priority
            Priority priority = getPriority();

            //TODO -  Get Status
            Status status = getStatus();

            //TODO -  Title
            String titleString = mTitleText.getText().toString();

            // Date
            String fullDate = dateString + " " + timeString;

            // Package ToDoItem data into an Intent
            Intent data = new Intent();
            ToDoItem.packageIntent(data, titleString, priority, status, fullDate);

            //TODO - return data Intent and finish
            setResult(Activity.RESULT_OK, data);
            finish();
            
        }
    });
}

// Do not modify below here

// Use this method to set the default date and time

private void setDefaultDateTime() {

    // Default is current time + 7 days
    mDate = new Date();
    mDate = new Date(mDate.getTime() + SEVEN_DAYS);

    Calendar c = Calendar.getInstance();
    c.setTime(mDate);

    setDateString(c.get(Calendar.YEAR), c.get(Calendar.MONTH),
            c.get(Calendar.DAY_OF_MONTH));

    dateView.setText(dateString);

    setTimeString(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE),
            c.get(Calendar.MILLISECOND));

    timeView.setText(timeString);
}

private static void setDateString(int year, int monthOfYear, int dayOfMonth) {

    // Increment monthOfYear for Calendar/Date -> Time Format setting
    monthOfYear++;
    String mon = "" + monthOfYear;
    String day = "" + dayOfMonth;

    if (monthOfYear < 10)
        mon = "0" + monthOfYear;
    if (dayOfMonth < 10)
        day = "0" + dayOfMonth;

    dateString = year + "-" + mon + "-" + day;
}

private static void setTimeString(int hourOfDay, int minute, int mili) {
    String hour = "" + hourOfDay;
    String min = "" + minute;

    if (hourOfDay < 10)
        hour = "0" + hourOfDay;
    if (minute < 10)
        min = "0" + minute;

    timeString = hour + ":" + min + ":00";
}

private Priority getPriority() {

    switch (mPriorityRadioGroup.getCheckedRadioButtonId()) {
    case R.id.lowPriority: {
        return Priority.LOW;
    }
    case R.id.highPriority: {
        return Priority.HIGH;
    }
    default: {
        return Priority.MED;
    }
    }
}

private Status getStatus() {

    switch (mStatusRadioGroup.getCheckedRadioButtonId()) {
    case R.id.statusDone: {
        return Status.DONE;
    }
    default: {
        return Status.NOTDONE;
    }
    }
}

// DialogFragment used to pick a ToDoItem deadline date

public static class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        // Use the current date as the default date in the picker

        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        setDateString(year, monthOfYear, dayOfMonth);

        dateView.setText(dateString);
    }

}

// DialogFragment used to pick a ToDoItem deadline time

public static class TimePickerFragment extends DialogFragment implements
        TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        // Use the current time as the default values for the picker
        final Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        // Create a new instance of TimePickerDialog and return
        return new TimePickerDialog(getActivity(), this, hour, minute,
                true);
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        setTimeString(hourOfDay, minute, 0);

        timeView.setText(timeString);
    }
}

private void showDatePickerDialog() {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getFragmentManager(), "datePicker");
}

private void showTimePickerDialog() {
    DialogFragment newFragment = new TimePickerFragment();
    newFragment.show(getFragmentManager(), "timePicker");
}

private void log(String msg) {
    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    Log.i(TAG, msg);
}

}

这是第二个 Activity ToDoItem

package course.labs.todomanager;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import android.content.Intent;

// Do not modify 

public class ToDoItem {

public static final String ITEM_SEP = System.getProperty("line.separator");

public enum Priority {
    LOW, MED, HIGH
};

public enum Status {
    NOTDONE, DONE
};

public final static String TITLE = "title";
public final static String PRIORITY = "priority";
public final static String STATUS = "status";
public final static String DATE = "date";
public final static String FILENAME = "filename";

public final static SimpleDateFormat FORMAT = new SimpleDateFormat(
        "yyyy-MM-dd HH:mm:ss", Locale.US);

private String mTitle = new String();
private Priority mPriority = Priority.LOW;
private Status mStatus = Status.NOTDONE;
private Date mDate = new Date();

ToDoItem(String title, Priority priority, Status status, Date date) {
    this.mTitle = title;
    this.mPriority = priority;
    this.mStatus = status;
    this.mDate = date;
}

// Create a new ToDoItem from data packaged in an Intent

ToDoItem(Intent intent) {

    mTitle = intent.getStringExtra(ToDoItem.TITLE);
    mPriority = Priority.valueOf(intent.getStringExtra(ToDoItem.PRIORITY));
    mStatus = Status.valueOf(intent.getStringExtra(ToDoItem.STATUS));

    try {
        mDate = ToDoItem.FORMAT.parse(intent.getStringExtra(ToDoItem.DATE));
    } catch (ParseException e) {
        mDate = new Date();
    }
}

public String getTitle() {
    return mTitle;
}

public void setTitle(String title) {
    mTitle = title;
}

public Priority getPriority() {
    return mPriority;
}

public void setPriority(Priority priority) {
    mPriority = priority;
}

public Status getStatus() {
    return mStatus;
}

public void setStatus(Status status) {
    mStatus = status;
}

public Date getDate() {
    return mDate;
}

public void setDate(Date date) {
    mDate = date;
}

// Take a set of String data values and 
// package them for transport in an Intent

public static void packageIntent(Intent intent, String title,
        Priority priority, Status status, String date) {

    intent.putExtra(ToDoItem.TITLE, title);
    intent.putExtra(ToDoItem.PRIORITY, priority.toString());
    intent.putExtra(ToDoItem.STATUS, status.toString());
    intent.putExtra(ToDoItem.DATE, date);

}

public String toString() {
    return mTitle + ITEM_SEP + mPriority + ITEM_SEP + mStatus + ITEM_SEP
            + FORMAT.format(mDate);
}

public String toLog() {
    return "Title:" + mTitle + ITEM_SEP + "Priority:" + mPriority
            + ITEM_SEP + "Status:" + mStatus + ITEM_SEP + "Date:"
            + FORMAT.format(mDate);
}

}

这是第三个 Activity ,它是 ToDoListAdapter

package course.labs.todomanager;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
import course.labs.todomanager.ToDoItem.Status;

public class ToDoListAdapter extends BaseAdapter {

// List of ToDoItems
private final List<ToDoItem> mItems = new ArrayList<ToDoItem>();

private final Context mContext;

private static final String TAG = "Lab-UserInterface";

public ToDoListAdapter(Context context) {

    mContext = context;

}

// Add a ToDoItem to the adapter
// Notify observers that the data set has changed

public void add(ToDoItem item) {

    mItems.add(item);
    notifyDataSetChanged();

}

// Clears the list adapter of all items.

public void clear(){

    mItems.clear();
    notifyDataSetChanged();

}

// Returns the number of ToDoItems

@Override
public int getCount() {

    return mItems.size();

}

// Retrieve the number of ToDoItems

@Override
public Object getItem(int pos) {

    return mItems.get(pos);

}

// Get the ID for the ToDoItem
// In this case it's just the position

@Override
public long getItemId(int pos) {

    return pos;

}

//Create a View to display the ToDoItem 
// at specified position in mItems

@Override
public View getView(int position, View convertView, ViewGroup parent) {


    //TODO - Get the current ToDoItem
    final ToDoItem toDoItem = getItemPos();

    //TODO - Inflate the View for this ToDoItem
    // from todo_item.xml.
    LayoutInflater = itemLayout;
    RelativeLayout itemLayout = m.context.getSystemService(R.layout.todo_item);
    
    //TODO - Fill in specific ToDoItem data
    // Remember that the data that goes in this View
    // corresponds to the user interface elements defined 
    // in the layout file 

    //TODO - Display Title in TextView

    final TextView titleView = ItemLayout.findViewById;
    setTextView;

    //TODO - Set up Status CheckBox

    final CheckBox statusView = ItemLayout.findViewById(R.id.statusCheckBox);
    statusView.setChecked(checked) statusDone;
    
    statusView.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            log("Entered onCheckedChanged()");
            
            //TODO - Set up and implement an OnCheckedChangeListener, which 
            // is called when the user toggles the status checkbox
            if isChecked ToDoItem.setStatus status.Done(true);
            else

        
        }
    });

    //TODO - Display Priority in a TextView

    final TextView priorityView = findViewByID(R.id.PriorityView);
    PriorityView.setToString();

    
    //TODO - Display Time and Date. 
    // Hint - use ToDoItem.FORMAT.format(toDoItem.getDate()) to get date and time String

    final TextView dateView = itemLayout.findViewById(R.id.dateView);
            dateView.setText(ToDoItem.FORMAT);

    // Return the View you just created
    return itemLayout;

}

private void log(String msg) {
    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    Log.i(TAG, msg);
}

}

这是第四个 Activity ToDoManagerActivity

package course.labs.todomanager;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.text.ParseException;
import java.util.Date;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import course.labs.todomanager.ToDoItem.Priority;
import course.labs.todomanager.ToDoItem.Status;

public class ToDoManagerActivity extends ListActivity {

// Add a ToDoItem Request Code
private static final int ADD_TODO_ITEM_REQUEST = 0;

private static final String FILE_NAME = "TodoManagerActivityData.txt";
private static final String TAG = "Lab-UserInterface";

// IDs for menu items
private static final int MENU_DELETE = Menu.FIRST;
private static final int MENU_DUMP = Menu.FIRST + 1;

ToDoListAdapter mAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create a new TodoListAdapter for this ListActivity's ListView
    mAdapter = new ToDoListAdapter(getApplicationContext());

    // Put divider between ToDoItems and FooterView
    getListView().setFooterDividersEnabled(true);

    //TODO - Inflate footerView for footer_view.xml file

    TextView footerView = TextView().getLayoutInflater()
        .inflate(R.layout.footer_view, null);

    //TODO - Add footerView to ListView
    getListView fv = (ListView)findViewById(R.layout.footer_view);
    
    footerView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            log("Entered footerView.OnClickListener.onClick()");

            //TODO - Attach Listener to FooterView. Implement onClick().
            Intent intent = new Intent(getBaseContext(), AddToDoActivity.class);
                    startActivityForResult(intent, ADD_TODO_ITEM_REQUEST);
        }
    });

    //TODO - Attach the adapter to this ListActivity's ListView
    getListView.footer_view.setAdapter(mAdapter, fv);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    log("Entered onActivityResult()");

    // TODO - Check result code and request code.
    // If user submitted a new ToDoItem
    // Create a new ToDoItem from the data Intent
    // and then add it to the adapter
    if requestCode == ADD_TODO_ITEM_REQUEST {
        also if resultCode != RESULT_OK(true);
        new mAdapter++;
        
    }
}

// Do not modify below here

@Override
public void onResume() {
    super.onResume();

    // Load saved ToDoItems, if necessary

    if (mAdapter.getCount() == 0)
        loadItems();
}

@Override
protected void onPause() {
    super.onPause();

    // Save ToDoItems

    saveItems();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    menu.add(Menu.NONE, MENU_DELETE, Menu.NONE, "Delete all");
    menu.add(Menu.NONE, MENU_DUMP, Menu.NONE, "Dump to log");
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case MENU_DELETE:
        mAdapter.clear();
        return true;
    case MENU_DUMP:
        dump();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

private void dump() {

    for (int i = 0; i < mAdapter.getCount(); i++) {
        String data = ((ToDoItem) mAdapter.getItem(i)).toLog();
        log("Item " + i + ": " + data.replace(ToDoItem.ITEM_SEP, ","));
    }

}

// Load stored ToDoItems
private void loadItems() {
    BufferedReader reader = null;
    try {
        FileInputStream fis = openFileInput(FILE_NAME);
        reader = new BufferedReader(new InputStreamReader(fis));

        String title = null;
        String priority = null;
        String status = null;
        Date date = null;

        while (null != (title = reader.readLine())) {
            priority = reader.readLine();
            status = reader.readLine();
            date = ToDoItem.FORMAT.parse(reader.readLine());
            mAdapter.add(new ToDoItem(title, Priority.valueOf(priority),
                    Status.valueOf(status), date));
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    } finally {
        if (null != reader) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

// Save ToDoItems to file
private void saveItems() {
    PrintWriter writer = null;
    try {
        FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
        writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
                fos)));

        for (int idx = 0; idx < mAdapter.getCount(); idx++) {

            writer.println(mAdapter.getItem(idx));

        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (null != writer) {
            writer.close();
        }
    }
}

private void log(String msg) {
    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    Log.i(TAG, msg);
}

}

有没有想过如何改进 AddToDoAcitivity 中的 cancelButton 代码?

final Button cancelButton = (Button) findViewById(R.id.cancelButton);
cancelButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        log("Entered cancelButton.OnClickListener.onClick()");

        //TODO - Implement onClick().  
        Intent intent = new Intent setResult;
        finish();
        
    }
});

有关java - 完成 UI Activity 分配的更多相关文章

  1. Ruby Koans about_array_assignment - 非平行与平行分配歧视 - 2

    通过ruby​​koans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John

  2. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  3. ruby - 在 Ruby 中重新分配常量时抛出异常? - 2

    我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案

  4. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  5. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  6. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  7. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  8. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  9. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  10. java - 为什么 ruby​​ modulo 与 java/other lang 不同? - 2

    我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.

随机推荐